免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
先馬后看!詳解線性回歸、樸素貝葉斯、隨機森林在R和Python中的實現(xiàn)應用?。ǜ酱a)


——谷歌董事長埃里克·施密特(Eric Schmidt)

我們或許生活在一個人類歷史上最具決定性的時期:從大型計算機到個人電腦,再到云計算時代。重要的不是過去已經(jīng)發(fā)生了什么,而是未來將會發(fā)生什么。

對于我這類人來說,這個時代致命的吸引力來源于工具和技術的民主化,以及隨之而來的計算機的蓬勃發(fā)展。歡迎來到數(shù)據(jù)科學的世界!

如今,作為一名數(shù)據(jù)科學家,我用復雜算法建立的數(shù)據(jù)處理機器每小時能賺好幾美金。但是要做到這個程度是非常不容易的!我曾經(jīng)歷過無數(shù)黑暗的日日夜夜。

如果你是一名正準備開始自己數(shù)據(jù)科學之旅的初學者。以下是兩門有關數(shù)據(jù)科學的全面課程,或許能夠幫助你(使用Python)從零開始了解這個領域:

數(shù)據(jù)科學導論

https://courses.analyticsvidhya.com/courses/introduction-to-data-science-2/?utm_source=blog&utm_medium=essentialMLalgorithmsarticle

認證計劃:面向數(shù)據(jù)科學初學者:

https://courses.analyticsvidhya.com/bundles/data-science-beginners-with-interview

本文主要圍繞常用的機器學習算法:算法覆蓋——線性回歸、邏輯回歸、樸素貝葉斯(Naive Bayes)、kNN、隨即森林,等等。主要學習在R語言和Python中這些算法的理論和實現(xiàn)應用。


誰能從這篇指南中獲益最多?


本文要講的內容,可能是作者寫過的最有價值的指南了。

寫這篇指南的主要目的是幫助世界上那些有抱負的數(shù)據(jù)科學家和機器學習愛好者們簡化他們的學習旅程。

本指南會幫助你解決機器學習問題,并獲得一些實踐經(jīng)驗。我將提供對于多個機器學習算法的高水平理解,以及運行這些算法的 R語言代碼和Python代碼。這些應該足夠讓你親自動手試一試了。

       

  用R語言和Python實現(xiàn)機器學習算法的要點

我特地跳過了這些技術背后的統(tǒng)計數(shù)據(jù),因為一開始你還不需要了解這些東西。因此,如果你想要從統(tǒng)計數(shù)據(jù)層面理解這些算法的話,那你可以去別的地方找找。但是,如果你想要為構建機器學習項目做好準備的話,那你應該會收獲頗豐。


廣義上來說,有3種機器學習算法


1. 監(jiān)督式學習(Supervised Learning)

工作機制:該算法由一個目標/結果變量(或因變量)組成,該變量由已知的一系列預測變量(自變量)計算而來。利用這一系列變量,我們生成一個將輸入值映射到所需輸出值的函數(shù)。該訓練過程會持續(xù)進行,直到模型在訓練數(shù)據(jù)上達到預期精確度。監(jiān)督式學習的例子有:回歸(Regression)、決策樹(Decision Tree)、隨機森林(Random Forest)、K最近鄰(KNN)、邏輯回歸(Logistic Regression)等等。

決策樹:

https://www.analyticsvidhya.com/blog/2015/01/decision-tree-simplified/)

隨機森林:

https://www.analyticsvidhya.com/blog/2014/06/introduction-random-forest-simplified/)

2. 非監(jiān)督式學習(Unsupervised Learning)

工作機制:在該算法中,我們不預測或估計任何目標變量或結果變量。此算法用于不同組內的聚類分析,被廣泛用于對不同群體的客戶進行細分,從而進行特定的干預。非監(jiān)督式學習的例子有:Apriori算法、K–均值算法。

3. 強化學習(Reinforcement Learning)

工作機制:該算法能夠訓練機器進行決策。其工作原理為:讓機器處于一個能夠通過反復試錯來訓練自己的環(huán)境中。機器從過去的經(jīng)驗中進行學習,并試圖通過學習最合適的知識來作出精準的商業(yè)判斷。強化學習的例子有:馬爾可夫決策過程(Markov Decision Process)。


常見機器學習算法列表


下面是一些常用的機器學習算法。這些算法幾乎可以應用于所有數(shù)據(jù)問題:

1.  線性回歸(Linear Regression)

2.  邏輯回歸(Logistic Regression)

3.  決策樹(Decision Tree)

4.  SVM

5.  樸素貝葉斯(Naive Bayes)

6.  K最近鄰(kNN)

7.  K均值算法(K-Means)

8.  隨機森林(Random Forest)

9.  降維算法(Dimensionality Reduction Algorithms)

10.  梯度提升算法(Gradient Boosting algorithms)

[1]    GBM

[2]    XGBoost

[3]    LightGBM

[4]    CatBoost

1. 線性回歸(Linear Regression)

線性回歸常用于根據(jù)連續(xù)變量估計實際數(shù)值(房屋成本、電話呼叫次數(shù)、總銷售額等)。在此,我們通過擬合一條最佳直線來建立自變量和因變量之間的關系。這條最佳擬合直線被稱為回歸線,用線性方程Y= a *X + b 來表示。

回顧童年經(jīng)歷能幫你更好地理解線性回歸。假設讓一個五年級的孩子在不問對方體重的情況下,將班上的同學按體重從輕到重進行排序,你覺得他(她)會怎么做?他(她)很可能會觀察同學們的身高和體型,通過綜合這些可見的參數(shù)來進行排序。這就是線性回歸在實際生活中應用的例子。這個孩子實際上已經(jīng)發(fā)現(xiàn)了身高、體型與體重之間有一定的關系,此關系類似于上面的等式。

在這個等式中:

·    Y – 因變量

·    a – 斜率

·    X – 自變量

·    b – 截距

系數(shù)a、b是通過最小化數(shù)據(jù)點與回歸線之間距離的平方差之和而得到的。

在下面這個例子中,我們確定了最佳擬合線 y=0.2811x+13.9。已知人的身高,我們可以通過這個方程來求出其體重。

       

     

線性回歸主要有一元線性回歸和多元線性回歸兩種。一元線性回歸的特點是只有一個自變量。多元線性回歸的特點,顧名思義,存在多個自變量。在尋找最佳擬合直線時,可以擬合到多項或曲線回歸。這就被稱為多項或曲線回歸。

現(xiàn)在,你可以試著通過以下鏈接中的編碼窗口用Python來構建自己的線性回歸模型了:

https://id.analyticsvidhya.com/auth/login/?next=https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/?&utm_source=coding-window-blog&source=coding-window-blog

R 語言代碼:

#Load Train and Test datasets
#Identify feature and response variable(s) and values must be numeric and numpy arrays
x_train <- input_variables_values_training_datasets
y_train <- target_variables_values_training_datasets
x_test <- input_variables_values_test_datasets
x <- cbind(x_train,y_train)
# Train the model using the training sets and check score
linear <- lm(y_train ~ ., data = x)
summary(linear)
#Predict Output
predicted= predict(linear,x_test)

2. 邏輯回歸(Logistic Regression)

不要被它的名字迷惑了!這不是一個回歸算法,而是一個分類算法。該算法能根據(jù)已知的一系列因變量來估計離散值(比如二進制數(shù)值0或/1 ,是/否,真/假)。簡單來說,它通過將數(shù)據(jù)擬合到一個邏輯函數(shù)來預測一件事發(fā)生的概率。

因此,它也被叫做邏輯回歸(logit function)。因為它預測的是概率,所以其輸出值(和預期一樣)位于0 和 1 之間。

邏輯回歸:

https://en.wikipedia.org/wiki/Logistic_function

讓我們再次通過一個簡單的例子來理解以下這個算法。

如果你的朋友給你出了一道難題。只有兩種結果:要么你解開了,要么沒解開?,F(xiàn)在想象一下,假設你需要解答很多道題來找出你所擅長的主題,那么該研究的結果會像是這樣:如果題目是一道十年級的三角函數(shù)題,那么你有 70%的可能會解開這道題。然而,如果題目是一道五年級的歷史題,你只有30%的可能性會回答正確。這就是邏輯回歸能提供給你的。

從數(shù)學上看,結果中機率的對數(shù)使用的是預測變量的線性組合模型。

odds= p/ (1-p) = probability of event occurrence / probability of not event occurrenceln(odds) = ln(p/(1-p))logit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk

p是興趣特征出現(xiàn)的概率。它選擇了使觀察樣本值的可能性最大化的值作為參數(shù),而沒有(像一般的回歸分析用到的一樣)選使誤差平方和最小化的值。

現(xiàn)在,你或許要問,為什么要求出對數(shù)呢?簡而言之,這種方法是復制階梯函數(shù)的最佳數(shù)學方法之一。我也可以講得更詳細一些,但那就違背本篇指南的主旨了。

       

     

請在以下鏈接中用Python構建自己的邏輯回歸模型并檢查其準確性:

https://id.analyticsvidhya.com/auth/login/?next=https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/?&utm_source=coding-window-blog&source=coding-window-blog

R語言代碼:

x <- cbind(x_train,y_train)
# Train the model using the training sets and check score
logistic <- glm(y_train ~ ., data = x,family='binomial')
summary(logistic)
#Predict Output
predicted= predict(logistic,x_test)

此外……

你還可以嘗試不同的方法來改進該模型:

·    加入交互項

·    精簡模型特征

·    正規(guī)化方法

·    使用非線性模型

正規(guī)化方法:

https://www.analyticsvidhya.com/blog/2015/02/avoid-over-fitting-regularization/

3. 決策樹(Decision Tree)

這是我最喜歡也是使用最頻繁的算法之一。該監(jiān)督式學習算法常被用于分類問題。它,出人意料地,同時適用于分類因變量和連續(xù)因變量。在這個算法中,我們將總體分為兩個或更多的同類群?;谧钪匾膶傩?自變量來分成盡可能不同的組別。

要想了解更多相關信息,你可以閱讀以下文章:

Decision Tree Simplified 簡化決策樹

       

     

圖源: statsexchange

如上圖所示,根據(jù)多個屬性,人群被分為四個不同的小組,從而確定他們“會不會去玩”。為了將總人群分成不同的組別,需要用到很多技術,如基尼系數(shù)(Gini)、信息增益(Information Gain)、卡方(Chi-square)、熵(entropy)。

了解決策樹工作機制的最好方式是玩Jezzball,這是一款來自于微軟的經(jīng)典游戲(見下圖)。游戲的玩法是:在一個可以移動墻壁的房間里,你需要通過創(chuàng)建墻壁來分割出沒有小球的最大空間。

       

     

因此,當你每次用墻壁來分隔房間時,都是試圖在同一間房里創(chuàng)建兩個不同的部分。決策樹以非常相似的機制工作,即把總體盡可能地分割到不同的組里去。

更多信息參見: Simplified Version of Decision Tree Algorithms 決策樹算法簡化版

下面親自動手用Python編寫自己的決策樹吧:

https://id.analyticsvidhya.com/auth/login/?next=https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/?&utm_source=coding-window-blog&source=coding-window-blog

R 語言代碼:

library(rpart)
x <- cbind(x_train,y_train)
# grow tree
fit <- rpart(y_train ~ ., data = x,method='class')
summary(fit)
#Predict Output
predicted= predict(fit,x_test)

4. SVM 支持向量機(Support Vector Machine)

SVM是一種分類方法。在此算法中,我們將每個數(shù)據(jù)繪制為N維空間中的一個點(其中N是你所有的特征總數(shù)),每個特征的值對應一個坐標值。

例如,假設我們只有身高和頭發(fā)長度兩個特征,那么我們就在二維空間中標出這兩個變量,其中每個點都有兩個坐標,這些坐標被稱為支持向量(Support Vectors)。

       

     

現(xiàn)在,我們要找到一些能夠將兩組不同數(shù)據(jù)分開的直線。找到符合要求的最優(yōu)線:兩個分組中距離該線最近的點到這條線的距離最遠。

       

     

上圖中,中間黑線將所有數(shù)據(jù)分為兩組,兩組中距離線最近的點(圖中A、B點)到達黑線的距離滿足最優(yōu)條件(距離該線最遠)。因此,這條直線就是我們的分類器。接下來,只要測試數(shù)據(jù)落到直線的哪一邊,就將其分為哪一類。

更多信息參見: Simplified Version of Support Vector Machine支持向量機的簡化

將這個算法想像成是在N維空間里玩JezzBall游戲,那么要調整的是:

·    現(xiàn)在你可以以任意角度畫線/平面(而不是像經(jīng)典游戲中那樣只能在水平或者豎直方向畫線)。

·    游戲的目的變成了把不同顏色的球分割在不同的空間里。

·    球的位置不會改變。

現(xiàn)在試著動手在以下窗口中用Python來設計一個SVM模型吧:

https://id.analyticsvidhya.com/auth/login/?next=https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/?&utm_source=coding-window-blog&source=coding-window-blog

R 語言代碼:

library(e1071)
x <- cbind(x_train,y_train)
# Fitting model
fit <-svm(y_train ~ ., data = x)
summary(fit)
#Predict Output
predicted= predict(fit,x_test)

5. 樸素貝葉斯(Naive Bayes)

這是一種以貝葉斯定理為基礎的分類技術,假設預測變量間相互獨立。簡單來講,樸素貝葉斯分類器假設一個分類的特性與該分類的其它特性無關。例如,如果一個水果又紅又圓,且直徑約為3英寸,那么這個水果可能會是蘋果。即便這些特征互相依賴,或者依賴于其他特征的存在,樸素貝葉斯分類器還是會假設這些特征分別獨立,暗示這個水果是蘋果。

樸素貝葉斯模型易于構建,且對于大型數(shù)據(jù)集尤其有用。除了簡單之外,樸素貝葉斯的表現(xiàn)甚至超過了非常復雜的分類方法。

貝葉斯定理提供了一種從P(c)、P(x)和P(x|c) 計算后驗概率 P(c|x) 的方法??匆幌乱韵碌仁剑?/span>

       

     

這里,

·    P(c|x) 是已知預測變量(屬性)的前提下,(目標)的后驗概率

·    P(c) 是的先驗概率

·    P(x|c) 是可能性,即已知的前提下,預測變量的概率

·    P(x) 是預測變量的先驗概率

例子:讓我們用一個例子來理解一下這個概念。下面有一個天氣的訓練數(shù)據(jù)集和對應的目標變量“玩”?,F(xiàn)在,我們需要根據(jù)天氣情況,將“玩”和“不玩”的參與者進行分類。我們可以按照以下步驟來執(zhí)行:

第1步:把數(shù)據(jù)集轉換成頻率表。

第2步:利用概率(如當Overcast可能性=0.29時,玩耍的可能性為0.64),創(chuàng)建Likelihood表格。

       

     

第3步:現(xiàn)在,使用樸素貝葉斯方程來計算每一類的后驗概率。后驗概率最高的一類就是預測結果。

問題:如果天氣晴朗,參與者就能玩。該陳述正確嗎?

這個問題可以用上面討論的方法求解,所以 P(玩 | 晴朗)= P(晴朗 | 玩)* P(玩)/ P (晴朗)

我們有 P (晴朗 |玩)= 3/9 = 0.33,P(晴朗) = 5/14 = 0.36, P(玩)= 9/14 = 0.64

現(xiàn)在,P(玩 | 晴朗)= 0.33 * 0.64 / 0.36 = 0.60,這可能性更大。

樸素貝葉斯使用相似的方法來預測不同屬性的不同類的概率。該算法多用于文本分類,和涉及多個類的問題。

R 語言代碼:

library(e1071)
x <- cbind(x_train,y_train)
# Fitting model
fit <-naiveBayes(y_train ~ ., data = x)
summary(fit)
#Predict Output
predicted= predict(fit,x_test)

6. kNN K-最近鄰算法(k- Nearest Neighbors)

kNN算法可用于分類和回歸問題。然而,K–最近鄰算法更常用于行業(yè)中的分類問題。K–最近鄰算法是一個簡單的算法,它存儲所有可用的案例,并通過k個案例中的大多數(shù)情況給新案例分類。根據(jù)一個距離函數(shù),新案例會被分配到通過距離函數(shù)測得的K個近鄰中最常見的類中去。

這些距離函數(shù)可以是歐幾里得距離(Euclidean)、曼哈頓距離(Manhattan)、閔可夫斯基距離(Minkowski)和漢明距離(Hamming)。前三個函數(shù)用于連續(xù)函數(shù),第四個函數(shù)(漢明)被用于分類變量。如果 K=1,則該案例就直接被分配給離它最近的案例的類。有時,執(zhí)行KNN建模時,選擇 K 的大小確實是一個挑戰(zhàn)。

       
     

我們的現(xiàn)實生活中常常會應用到KNN。如果你想要了解一個陌生人,你或許會想去找他的好朋友或所處的圈子來獲取信息。

選擇kNN前需要考慮的事情:

·    KNN的計算成本很高。

·    變量應該統(tǒng)一化,否則范圍較大的變量可能會造成偏差。

·    在進行kNN處理之前,要在處理階段的離群點、噪音去除等方面多下功夫。

Python 代碼:

https://id.analyticsvidhya.com/auth/login/?next=https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/?&utm_source=coding-window-blog&source=coding-window-blog

R 語言代碼:

library(knn)
x <- cbind(x_train,y_train)
# Fitting model
fit <-knn(y_train ~ ., data = x,k=5)
summary(fit)
#Predict Output
predicted= predict(fit,x_test)

7. K均值算法(K-Means)

這是一種能解決聚類問題的非監(jiān)督式學習算法。其過程簡單易行,將給定數(shù)據(jù)分類到一定數(shù)量的集群中去(假設有 k 個集群)。一個集群內的數(shù)據(jù)點對于對等集群來說是同質,且異構的。

還記得從墨跡中找出形狀的方法嗎?從某種程度上來說,K-均值算法與此有點類似。觀察形狀及延伸方式來辨認有多少種集群。

       

     

K-均值怎樣形成集群:

1.  K-均值為每個集群選擇k個點,稱為質心(centroid)。

2.  每個數(shù)據(jù)點與最近的質心形成一個集群,即k個集群。

3.  根據(jù)現(xiàn)有的集群成員查找每個集群的質心,然后就有了新的質心。

4.  當有了新的質心后,重復步驟2和3。找到每個數(shù)據(jù)點距離新質心的最近距離,然后與新的k-集群相關聯(lián)。重復這個過程直至匯聚,即質心不再改變。

如何確定K值:

在K–均值算法中,我們有集群,每個集群有自己的質心。一個集群內的質心和各數(shù)據(jù)點之間距離的平方和形成了這個集群的平方值之和。此外,當所有集群的平方值之和相加,就組成了集群方案的平方值之和。

我們知道,隨著集群數(shù)量的增加,K值會不斷下降。但是,如果將結果繪制成圖表,就會發(fā)現(xiàn)距離的平方和在急劇減少。到達某一K值后,減少的速度會大幅放緩。我們可以在此找到集群數(shù)量的最優(yōu)值。

       

     

Python 代碼:

https://id.analyticsvidhya.com/auth/login/?next=https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/?&utm_source=coding-window-blog&source=coding-window-blog

R 語言代碼:

library(cluster)
fit <- kmeans(X, 3) # 5 cluster solution

8. 隨機森林(Random Forest)

隨機森林是決策樹的總體專有名詞。在隨機森林算法中,我們有一系列決策樹(因此,被稱為“森林”)。為了根據(jù)屬性將新對象進行分類,每一棵決策樹都給出一個分類,稱之為該決策樹為該分類“投票”。森林選擇(在所有樹中)獲得票數(shù)最多的分類。

每棵樹的種植&培育過程:

1.  假設訓練集中的案例數(shù)為N,則使用重置抽樣法在N個案例中隨機抽取樣本。該樣本將作為此樹生長的訓練集。

2.  假設有M個輸入變量,則定義數(shù)字m<<M。m表示從M中隨機選擇m個變量,該m中最好的切分將被用來切分該節(jié)點。M值在森林生長過程中保持不變。

3.  每棵樹都盡可能地生長,不進行任何修剪。

如果你想了解更多關于此算法的詳細信息,比較決策樹和優(yōu)化模型參數(shù),可以閱讀以下文章:

1.  Introduction to Random forest – Simplified 隨機森林簡介-簡化版

2.  Comparing a CART model to Random Forest (Part 1) 比較CART模型與隨機森林(上)

3.  Comparing a Random Forest to a CART model (Part 2) 比較隨機森林與CART模型(下)

4.  Tuning the parameters of your Random Forest model 調節(jié)隨機森林模型參數(shù)

Python代碼:

https://id.analyticsvidhya.com/auth/login/?next=https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/?&utm_source=coding-window-blog&source=coding-window-blog

R語言代碼

library(randomForest)
x <- cbind(x_train,y_train)
# Fitting model
fit <- randomForest(Species ~ ., x,ntree=500)
summary(fit)
#Predict Output
predicted= predict(fit,x_test)

9. 降維算法(Dimensionality Reduction Algorithms)

在過去的4-5年里,在很多階段,信息都呈指數(shù)級增長。企業(yè)/政府機構/研究組織不僅帶來了新資源,還捕捉著詳盡的數(shù)據(jù)。

例如,電子商務公司正在獲取更為詳細的顧客的資料:人口統(tǒng)計信息、網(wǎng)頁瀏覽記錄、個人喜惡、購買記錄、反饋,以及其他多種信息,比你附近雜貨店的售貨員更加關注你。

作為數(shù)據(jù)科學家,我們提供的數(shù)據(jù)也包含許多特點,聽起來很適合構建良好且健壯的模型,但仍存在挑戰(zhàn):如何從 1000 或者 2000 個變量中里識別出最重要的變量呢?在這種情況下,降維算法和其他各算法(如決策樹、隨機森林、PCA、因子分析、給予相關矩陣的識別、缺失值比等)能夠一起為我們提供幫助。

要想了解有關此算法的更多信息,可以閱讀“Beginners Guide To Learn Dimension Reduction Techniques 降維技術初學者指南”。

Python 代碼:

https://id.analyticsvidhya.com/auth/login/?next=https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/?&utm_source=coding-window-blog&source=coding-window-blog

R 語言代碼:

library(stats)
pca <- princomp(train, cor = TRUE)
train_reduced <- predict(pca,train)
test_reduced <- predict(pca,test)

10. 梯度提升算法(Gradient Boosting Algorithms)

10.1. GBM

當我們要利用大量數(shù)據(jù)進行有高預測力的預測時,會使用到GBM這種提升算法。提升算法(boosting)是多種學習算法的集成,它結合了建立在多個基礎估計值基礎上的預測結果,從而提高單一估計值的可靠性。這些提升算法通常在Kaggl、AV Hackathon、CrowdAnalytix等數(shù)據(jù)科學比賽中表現(xiàn)出色。

更多信息詳見: Know about Boosting algorithms in detail 詳細了解提升算法

Python 代碼:

https://id.analyticsvidhya.com/auth/login/?next=https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/?&utm_source=coding-window-blog&source=coding-window-blog

R 語言代碼

library(caret)
x <- cbind(x_train,y_train)
# Fitting model
fitControl <- trainControl( method = 'repeatedcv', number = 4, repeats = 4)
fit <- train(y ~ ., data = x, method = 'gbm', trControl = fitControl,verbose = FALSE)
predicted= predict(fit,x_test,type= 'prob')[,2]

10.2. XGBoost

這在某些Kaggle競賽中,決定勝負的另一種經(jīng)典梯度提升算法。

XGBoost具有極高的預測能力,這使其成為預測事件準確性的最佳選擇。它同時具有線性模型和樹學習算法的優(yōu)點,這使得該算法比現(xiàn)有的梯度提升技術快了近10倍。

此算法支持包括回歸、分類和排序在內的多種目標函數(shù)。

有關XGBoost的最有趣的事情之一是,它也被稱為正則化增強技術(regularized boosting technique)。這有助于減少模型過擬合,并為Scala、Java、R、Python、Julia 和C++等語言提供了大量支持。

算法支持在GCE、AWS、Azure 和Yarn clusters等許多計算機上進行訓練。

想要了解更多關于XGBoost和參數(shù)調整的信息,可以訪問:

https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/

Python 代碼:

https://id.analyticsvidhya.com/auth/login/?next=https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/?&utm_source=coding-window-blog&source=coding-window-blog

R 語言代碼:

require(caret)
x <- cbind(x_train,y_train)
# Fitting model
TrainControl <- trainControl( method = 'repeatedcv', number = 10, repeats = 4)
model<- train(y ~ ., data = x, method = 'xgbLinear', trControl = TrainControl,verbose = FALSE)
OR
model<- train(y ~ ., data = x, method = 'xgbTree', trControl = TrainControl,verbose = FALSE)
predicted <- predict(model, x_test)

10.3. LightGBM

LightGBM是一個使用以樹為基礎的學習算法的梯度增強框架,采用分布式且高效的設計,具有以下優(yōu)點:

  • 訓練速度更快且效率更高

  • 降低內存使用量

  • 精準度更高

  • 支持并行和GPU學習

  • 能夠處理大規(guī)模數(shù)據(jù)


該框架是一種基于決策樹算法的快速、高性能的梯度提升算法,被用于處理排名、分類以及許多其他機器學習任務。它是在微軟的分布式機器學習工具包項目(Distributed Machine Learning Toolkit Project)下開發(fā)的。

由于LightGBM是以決策樹算法為基礎的,因此它以最佳擬合的方式對樹葉進行切分,而其他提升算法則對樹的深度或層次進行拆分,而不是對葉進行拆分。因此,當在Light GBM中的同一葉上生長時,與逐層算法相比,逐葉算法可以減少更多的損失,從而獲得更好的精準度,而現(xiàn)有的任何提升算法都難以達到這種精準度。

此外,其速度快得驚人,因此其名字中“Light”這一詞。

要想了解更多有關LightGBM的信息,請參考: 
https://www.analyticsvidhya.com/blog/2017/06/which-algorithm-takes-the-crown-light-gbm-vs-xgboost/

Python 代碼:

data = np.random.rand(500, 10) # 500 entities, each contains 10 features
label = np.random.randint(2, size=500) # binary target
train_data = lgb.Dataset(data, label=label)
test_data = train_data.create_valid('test.svm')
param = {'num_leaves':31, 'num_trees':100, 'objective':'binary'}
param['metric'] = 'auc'
num_round = 10
bst = lgb.train(param, train_data, num_round, valid_sets=[test_data])
bst.save_model('model.txt')
# 7 entities, each contains 10 features
data = np.random.rand(7, 10)
ypred = bst.predict(data)

R 語言代碼:

library(RLightGBM)
data(example.binary)
#Parameters
num_iterations <- 100
config <- list(objective = 'binary', metric='binary_logloss,auc', learning_rate = 0.1, num_leaves = 63, tree_learner = 'serial', feature_fraction = 0.8, bagging_freq = 5, bagging_fraction = 0.8, min_data_in_leaf = 50, min_sum_hessian_in_leaf = 5.0)
#Create data handle and booster
handle.data <- lgbm.data.create(x)
lgbm.data.setField(handle.data, 'label', y)
handle.booster <- lgbm.booster.create(handle.data, lapply(config, as.character))
#Train for num_iterations iterations and eval every 5 steps
lgbm.booster.train(handle.booster, num_iterations, 5)
#Predict
pred <- lgbm.booster.predict(handle.booster, x.test)
#Test accuracy
sum(y.test == (y.pred > 0.5)) / length(y.test)
#Save model (can be loaded again via lgbm.booster.load(filename))
lgbm.booster.save(handle.booster, filename = '/tmp/model.txt')

如果你了解R語言中的Caret包的話,以下是實現(xiàn)LightGBM的快速方法。

require(caret)
require(RLightGBM)
data(iris)
model <-caretModel.LGBM()
fit <- train(Species ~ ., data = iris, method=model, verbosity = 0)
print(fit)
y.pred <- predict(fit, iris[,1:4])
library(Matrix)
model.sparse <- caretModel.LGBM.sparse()
#Generate a sparse matrix
mat <- Matrix(as.matrix(iris[,1:4]), sparse = T)
fit <- train(data.frame(idx = 1:nrow(iris)), iris$Species, method = model.sparse, matrix = mat, verbosity = 0)
print(fit)

10.4. Catboost

CatBoost是Yandex最近發(fā)布的一款開源機器學習算法。它可以輕松地與深度學習框架(如Google的TensorFlow和Apple的Core ML)集成。

CatBoost最大的優(yōu)點在于,它不需要像其他ML模型那樣進行大量的數(shù)據(jù)訓練,并且可以處理多種數(shù)據(jù)格式,不會破壞其穩(wěn)健性。

Catboost可以自動處理分類變量,而不會顯示類型轉換錯誤,這有助于你更好地專注于模型調整,而不是解決各種瑣碎的錯誤。

要想了解更多關于Catboost的信息,可以參考本文: 

https://www.analyticsvidhya.com/blog/2017/08/catboost-automated-categorical-data/

Python 代碼:

 import pandas as pd
import numpy as np
from catboost import CatBoostRegressor
#Read training and testing files
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
#Imputing missing values for both train and test
train.fillna(-999, inplace=True)
test.fillna(-999,inplace=True)
#Creating a training set for modeling and validation set to check model performance
X = train.drop(['Item_Outlet_Sales'], axis=1)
y = train.Item_Outlet_Sales
from sklearn.model_selection import train_test_split
X_train, X_validation, y_train, y_validation = train_test_split(X, y, train_size=0.7, random_state=1234)
categorical_features_indices = np.where(X.dtypes != np.float)[0]
#importing library and building model
from catboost import CatBoostRegressormodel=CatBoostRegressor(iterations=50, depth=3, learning_rate=0.1, loss_function='RMSE')
model.fit(X_train, y_train,cat_features=categorical_features_indices,eval_set=(X_validation, y_validation),plot=True)
submission = pd.DataFrame()
submission['Item_Identifier'] = test['Item_Identifier']
submission['Outlet_Identifier'] = test['Outlet_Identifier']
submission['Item_Outlet_Sales'] = model.predict(test)

R 語言代碼:

set.seed(1)
require(titanic)
require(caret)
require(catboost)
tt <- titanic::titanic_train[complete.cases(titanic::titanic_train),]
data <- as.data.frame(as.matrix(tt), stringsAsFactors = TRUE)
drop_columns = c('PassengerId', 'Survived', 'Name', 'Ticket', 'Cabin')
x <- data[,!(names(data) %in% drop_columns)]y <- data[,c('Survived')]
fit_control <- trainControl(method = 'cv', number = 4,classProbs = TRUE)
grid <- expand.grid(depth = c(4, 6, 8),learning_rate = 0.1,iterations = 100, l2_leaf_reg = 1e-3, rsm = 0.95, border_count = 64)
report <- train(x, as.factor(make.names(y)),method = catboost.caret,verbose = TRUE, preProc = NULL,tuneGrid = grid, trControl = fit_control)
print(report)
importance <- varImp(report, scale = FALSE)
print(importance)
 

結語


至此,我敢肯定你已經(jīng)對常用的機器學習算法有了一定的了解了。作者寫這篇文章并提供相應的R語言代碼和Python代碼的唯一目的就是幫助你找到起點。如果你想要完全掌握機器學習算法的話,那就馬上開始吧。著手解決問題,加深對過程的理解,將這些代碼用起來并從中發(fā)現(xiàn)樂趣!

這篇文章對你來說有幫助嗎?請在下面評論區(qū)分享你的觀點和想法。

原文:
https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/
(*本文由 AI 科技大本營編譯,轉載請聯(lián)系微信1092722531)

【end】



本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
吳恩達:機器學習的六個核心算法
決策矩陣、聚類、回歸……這里有一篇無人駕駛的機器學習算法大全!
最新機器學習必備十大入門算法!都在這里了(KDnuggets整理)
老司機手把手教你學編程,計算機學習的10種經(jīng)典算法的Python實現(xiàn)
一文了解機器學習知識點及其算法(附python代碼)
“Notes on Programming in C” 閱讀
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服