...詳解線性回歸、樸素貝葉斯、隨機森林在R和Python中的實現應用...

2021-01-11 AI科技大本營

來源| analyticsvidhya

編譯| 火火醬,責編| Carol

出品 | AI科技大本營(ID:rgznai100)

谷歌的自動駕駛汽車和機器人得到了媒體的廣泛關注,但是公司真正的未來是在機器學習領域,這一技術會使計算機變得更加智能、更個性化。——谷歌董事長埃裡克·施密特(Eric Schmidt)

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

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

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

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

數據科學導論:

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

認證計劃:面向數據科學初學者:

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

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

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

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

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

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

用R語言和Python實現機器學習算法的要點

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

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

1. 監督式學習(Supervised Learning)

工作機制:該算法由一個目標/結果變量(或因變量)組成,該變量由已知的一系列預測變量(自變量)計算而來。利用這一系列變量,我們生成一個將輸入值映射到所需輸出值的函數。該訓練過程會持續進行,直到模型在訓練數據上達到預期精確度。監督式學習的例子有:回歸(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. 非監督式學習(Unsupervised Learning)

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

3. 強化學習(Reinforcement Learning)

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

常見機器學習算法列表

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

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)

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

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

在這個等式中:

· Y – 因變量

· a – 斜率

· X – 自變量

· b – 截距

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

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

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

現在,你可以試著通過以下連結中的編碼窗口用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 arraysx_train <- input_variables_values_training_datasetsy_train <- target_variables_values_training_datasetsx_test <- input_variables_values_test_datasetsx <- cbind(x_train,y_train)# Train the model using the training sets and check scorelinear <- lm(y_train ~ ., data = x)summary(linear)#Predict Outputpredicted= predict(linear,x_test)

2. 邏輯回歸(Logistic Regression)

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

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

邏輯回歸:

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

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

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

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

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....+bkXkp是興趣特徵出現的概率。它選擇了使觀察樣本值的可能性最大化的值作為參數,而沒有(像一般的回歸分析用到的一樣)選使誤差平方和最小化的值。

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

請在以下連結中用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 scorelogistic <- glm(y_train ~ ., data = x,family='binomial')summary(logistic)#Predict Outputpredicted= predict(logistic,x_test)此外……

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

· 加入交互項

· 精簡模型特徵

· 正規化方法

· 使用非線性模型

正規化方法:

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

3. 決策樹(Decision Tree)

這是我最喜歡也是使用最頻繁的算法之一。該監督式學習算法常被用於分類問題。它,出人意料地,同時適用於分類因變量和連續因變量。在這個算法中,我們將總體分為兩個或更多的同類群。基於最重要的屬性/自變量來分成儘可能不同的組別。

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

Decision Tree Simplified 簡化決策樹

圖源: statsexchange

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

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

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

更多信息參見: 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 treefit <- rpart(y_train ~ ., data = x,method="class")summary(fit)#Predict Outputpredicted= predict(fit,x_test)4. SVM 支持向量機(Support Vector Machine)

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

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

現在,我們要找到一些能夠將兩組不同數據分開的直線。找到符合要求的最優線:兩個分組中距離該線最近的點到這條線的距離最遠。

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

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

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

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

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

· 球的位置不會改變。

現在試著動手在以下窗口中用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 modelfit <-svm(y_train ~ ., data = x)summary(fit)#Predict Outputpredicted= predict(fit,x_test)

5. 樸素貝葉斯(Naive Bayes)

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

樸素貝葉斯模型易於構建,且對於大型數據集尤其有用。除了簡單之外,樸素貝葉斯的表現甚至超過了非常複雜的分類方法。

貝葉斯定理提供了一種從P(c)、P(x)和P(x|c) 計算後驗概率 P(c|x) 的方法。看一下以下等式:

這裡,

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

· P(c) 是類的先驗概率

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

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

例子:讓我們用一個例子來理解一下這個概念。下面有一個天氣的訓練數據集和對應的目標變量「玩」。現在,我們需要根據天氣情況,將「玩」和「不玩」的參與者進行分類。我們可以按照以下步驟來執行:

第1步:把數據集轉換成頻率表。

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

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

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

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

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

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

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

R 語言代碼:

library(e1071)x <- cbind(x_train,y_train)# Fitting modelfit <-naiveBayes(y_train ~ ., data = x)summary(fit)#Predict Outputpredicted= predict(fit,x_test)6. kNN K-最近鄰算法(k- Nearest Neighbors)

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

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

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

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

· KNN的計算成本很高。

· 變量應該統一化,否則範圍較大的變量可能會造成偏差。

· 在進行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 modelfit <-knn(y_train ~ ., data = x,k=5)summary(fit)#Predict Outputpredicted= predict(fit,x_test)

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

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

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

K-均值怎樣形成集群:

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

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

3. 根據現有的集群成員查找每個集群的質心,然後就有了新的質心。

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

如何確定K值:

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

我們知道,隨著集群數量的增加,K值會不斷下降。但是,如果將結果繪製成圖表,就會發現距離的平方和在急劇減少。到達某一K值後,減少的速度會大幅放緩。我們可以在此找到集群數量的最優值。

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)

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

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

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

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

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

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

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 調節隨機森林模型參數

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 modelfit <- randomForest(Species ~ ., x,ntree=500)summary(fit)#Predict Outputpredicted= predict(fit,x_test)9. 降維算法(Dimensionality Reduction Algorithms)

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

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

作為數據科學家,我們提供的數據也包含許多特點,聽起來很適合構建良好且健壯的模型,但仍存在挑戰:如何從 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

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

更多信息詳見: 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 modelfitControl <- 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競賽中,決定勝負的另一種經典梯度提升算法。

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

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

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

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

想要了解更多關於XGBoost和參數調整的信息,可以訪問:

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 modelTrainControl <- trainControl( method = "repeatedcv", number = 10, repeats = 4)model<- train(y ~ ., data = x, method = "xgbLinear", trControl = TrainControl,verbose = FALSE)ORmodel<- train(y ~ ., data = x, method = "xgbTree", trControl = TrainControl,verbose = FALSE)predicted <- predict(model, x_test)10.3. LightGBM

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

訓練速度更快且效率更高降低內存使用量精準度更高支持並行和GPU學習能夠處理大規模數據該框架是一種基於決策樹算法的快速、高性能的梯度提升算法,被用於處理排名、分類以及許多其他機器學習任務。它是在微軟的分布式機器學習工具包項目(Distributed Machine Learning Toolkit Project)下開發的。

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

此外,其速度快得驚人,因此其名字中「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 featureslabel = np.random.randint(2, size=500) # binary targettrain_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 = 10bst = lgb.train(param, train_data, num_round, valid_sets=[test_data])bst.save_model('model.txt')# 7 entities, each contains 10 featuresdata = np.random.rand(7, 10)ypred = bst.predict(data)R 語言代碼:

library(RLightGBM)data(example.binary)#Parametersnum_iterations <- 100config <- 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 boosterhandle.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 stepslgbm.booster.train(handle.booster, num_iterations, 5)#Predictpred <- lgbm.booster.predict(handle.booster, x.test)#Test accuracysum(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包的話,以下是實現LightGBM的快速方法。

require(caret)require(RLightGBM)data(iris)model <-caretModel.LGBMfit <- 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 matrixmat <- 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最近發布的一款開源機器學習算法。它可以輕鬆地與深度學習框架(如Google的TensorFlow和Apple的Core ML)集成。

CatBoost最大的優點在於,它不需要像其他ML模型那樣進行大量的數據訓練,並且可以處理多種數據格式,不會破壞其穩健性。

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

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

Python 代碼:

import pandas as pdimport numpy as npfrom catboost import CatBoostRegressor#Read training and testing filestrain = pd.read_csv("train.csv")test = pd.read_csv("test.csv")#Imputing missing values for both train and testtrain.fillna(-999, inplace=True)test.fillna(-999,inplace=True)#Creating a training set for modeling and validation set to check model performanceX = train.drop(['Item_Outlet_Sales'], axis=1)y = train.Item_Outlet_Salesfrom sklearn.model_selection import train_test_splitX_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 modelfrom 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.DataFramesubmission['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 = ,tuneGrid = grid, trControl = fit_control)print(report)importance <- varImp(report, scale = FALSE)print(importance)

結語

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

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

原文:

https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/

(*本文由 AI 科技大本營編譯,轉載請聯繫微信1092722531)

【end】

2月29日全天直播——中國「遠程辦公」大考·線上峰會

10+位來自華為、阿里、微軟、CODING等名企的專家大牛為大家做全天直播!

在線答疑、吐槽評論、現場抽獎等與大咖多維互動,不出家門,用程式設計師的方式來共同「抗」疫!

機器學習中的線性回歸,你理解多少?華為諾亞、北大提出GhostNet,使用線性變換生成特徵圖,準確率超MobileNet v3兩成開發者月薪超 1.7 萬、算法工程師最緊缺! | 中國開發者年度報告探索處理數據的新方法,8 個重點帶你搞懂雲資料庫——DBaaS(資料庫即服務)到底是什麼!遠程辦公是一陣「過渡風」還是會「繼續燃燒」?在家辦公憋瘋了?不,我還能再待一年!

相關焦點

  • 詳解線性回歸、樸素貝葉斯、隨機森林在R和Python中的...
    、邏輯回歸、樸素貝葉斯(Naive Bayes)、kNN、隨即森林,等等。主要學習在R語言和Python中這些算法的理論和實現應用。誰能從這篇指南中獲益最多?本文要講的內容,可能是作者寫過的最有價值的指南了。寫這篇指南的主要目的是幫助世界上那些有抱負的數據科學家和機器學習愛好者們簡化他們的學習旅程。
  • 回歸、分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R...
    另外,線性模型很容易使用隨機梯度下降和新數據更新模型權重。缺點:線性回歸在變量是非線性關係的時候表現很差。並且其也不夠靈活以捕捉更複雜的模式,添加正確的交互項或使用多項式很困難並需要大量時間。隨機森林 Python 實現:http://scikit-learn.org/stable/modules/ensemble.html#random-forests隨機森林 R 實現:https://cran.r-project.org/web/packages/randomForest/index.html梯度提升樹 Python 實現:http://scikit-learn.org
  • python實現高斯樸素貝葉斯分類器
    python實現高斯樸素貝葉斯分類器    在這篇文章中,我們將使用我最喜歡的機器學習庫scikit-learn在Python中實現樸素貝葉斯分類器。接下來,我們將使用經過訓練的樸素貝葉斯(監督分類法)模型來預測人口收入。
  • 貝葉斯線性回歸在期貨交易中的應用
    貝葉斯線性回歸模型與經典的線性回歸模型有很大區別,後者把回歸係數看作是固定的未知參數,而前者則把回歸係數看作是一個未知的概率分布,然後根據可獲得的樣本對這些未知分布進行推斷。在計算待預測變量的分布時需要根據回歸係數的分布在給定自變量的情況下進行採樣,從而得到待預測變量的分布。因此通常訓練貝葉斯模型和利用該類模型做預測的計算量都會比常規線性回歸要大。
  • 具有貝葉斯優化的XGBoost和隨機森林
    和隨機森林,並指出這些算法的優缺點。XGBoost(XGB)和隨機森林(RF)都是集成學習方法,並通過組合各個決策樹的輸出(我們假設基於樹的XGB或RF)來預測(分類或回歸)。隨機森林隨機森林(RF)使用隨機數據樣本獨立訓練每棵樹。這種隨機性有助於使模型比單個決策樹更健壯。由於RF不太可能過度擬合訓練數據。隨機森林應用示例隨機森林差異性已被用於各種應用,例如,基於組織標記數據找到患者群。
  • 入門| 貝葉斯線性回歸方法的解釋和優點
    本文對比了頻率線性回歸和貝葉斯線性回歸兩種方法,並對後者進行了詳細的介紹,分析了貝葉斯線性回歸的優點和直觀特徵。我認為貝葉斯學派和頻率學派之間的紛爭是「可遠觀而不可褻玩」的學術爭論之一。與其熱衷於站隊,我認為同時學習這兩種統計推斷方法並且將它們應用到恰當的場景之下會更加富有成效。
  • 機器學習算法一覽(附python和R代碼)
    )6.K鄰近算法(KNN)7.K-均值算法(K-means)8.隨機森林 (Random Forest)9.降低維度算法(Dimensionality Reduction Algorithms)10.Gradient Boost和Adaboost算法 1.線性回歸 (Linear Regression) 線性回歸是利用連續性變量來估計實際數值
  • 基於貝葉斯定理的算法——樸素貝葉斯分類
    不過今天我們介紹的樸素貝葉斯分類器通過獨立假設簡化了概率的計算,節省了內存,可以很好地用於數據量大的情況。下面我們首先來了解這一算法的數理背景——貝葉斯定理。這一算法是由我們在概率論中學到的貝葉斯定理延伸出來的。我們知道貝葉斯公式為:其中,
  • 【乾貨】隨機森林的Python實現
    【新智元導讀】在機器學習中,隨機森林是一個包含多個決策樹的分類器,並且其輸出的類別是由個別樹輸出的類別的眾數而定。隨機森林幾乎是任何預測類問題(甚至非線性問題)的首選。本文介紹了隨機森林的原理、用途,以及用 Python 實現隨機森林的方法。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    特徵變換-數值化 5-10特徵變換-正規化 5-11特徵降維-LDA 5-12特徵衍生 5-13HR表的特徵預處理 5-14 HR表的特徵預處理2 5-15本章小結 6-01機器學習與數據建模 6-02訓練集,驗證集,測試集 6-03分類-KNN 6-04分類-樸素貝葉斯
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    三、課程特點 課程重視代碼實踐,使用金融、氣象、農業、交通、安防等工業界實際數據(數據已脫敏)進行機器學習模型的落地應用。雖然課程堅持推導公式,但更重視機器學習和深度學習的原理與實操;將實際工作中遇到的行業應用和痛點做最直觀切實的展示;重視算法模型的同時,更強調實際問題中應該如何模型選擇、特徵選擇和調參。
  • 樸素貝葉斯詳解及中文輿情分析(附代碼實踐)
    樸素貝葉斯數學原理知識該基礎知識部分引用文章"機器學習之樸素貝葉斯(NB)分類算法與Python實現"(https://blog.csdn.net/moxigandashu/article/details/71480251),也強烈推薦大家閱讀博主moxigandashu的文章,寫得很好。同時作者也結合概率論講解,提升下自己較差的數學。
  • 【新書推薦】《機器學習及R應用》目錄
    第4章 線性回歸  4.1監督學習的回歸問題  4.2zui優預測  4.3線性回歸模型  4.4zui小二乘法  4.5 OLS的正交性與幾何解釋  4.6施密特正交化與判別分析  7.1貝葉斯決策理論  7.2線性判別分析  7.3二次判別分析  7.4費雪線性判別分析  7.5費雪線性判別與基於正態的線性判別之關係  7.6多分類問題的費雪判別分析  7.7判別分析的R案例  附錄A7.1總體中的多分類費雪判別分析
  • 科普丨樸素貝葉斯了解一下
    樸素貝葉斯用貝葉斯定理來預測結果值,該值同時依賴於多個要素,因此必須遵循上述假設。這就是為什麼它被稱為樸素!01樸素貝葉斯的實際應用在幾乎所有的現實世界中,大多數特徵都是相互依賴的。這將使樸素貝葉斯在現實生活中幾乎不可能實現。那麼它在哪裡使用呢?
  • 樸素貝葉斯算法及應用案例
    作者:陳千鶴 來源:人工智慧學習圈本篇主要介紹樸素貝葉斯算法及應用案例。以Tatinic數據集為例進行應用,同時介紹數據處理,數據集的劃分,算法效果評估等內容。一、簡介樸素貝葉斯法是基於貝葉斯定理與特徵條件獨立假設的分類方法 。
  • 機器學習算法的基本知識(使用Python和R代碼)
    監督學習的例子:回歸,決策樹,隨機森林,KNN,邏輯回歸等  無監督學習  如何工作:在這個算法中,我們沒有任何目標或結果變量來預測/估計。 用於不同群體的群體聚類和用於不同群體的客戶進行特定幹預。 無監督學習的例子:Apriori算法,K-means。  加強學習:  工作原理:使用這種算法,機器受到學習和訓練,作出具體決定。
  • 線性回歸:簡單線性回歸詳解
    【導讀】本文是一篇專門介紹線性回歸的技術文章,討論了機器學習中線性回歸的技術細節。線性回歸核心思想是獲得最能夠擬合數據的直線。
  • 樸素貝葉斯分類器詳解及中文文本輿情分析(附代碼實踐)
    樸素貝葉斯數學原理知識該基礎知識部分引用文章"機器學習之樸素貝葉斯(NB)分類算法與Python實現"(https://blog.csdn.net/moxigandashu/article/details/71480251),也強烈推薦大家閱讀博主moxigandashu的文章,寫得很好。同時作者也結合概率論講解,提升下自己較差的數學。
  • 【華泰金工林曉明團隊】金工:人工智慧選股之樸素貝葉斯模型
    與「判別模型」學習決策函數和條件概率不同,生成模型主要學習的是聯合概率分布。本文中,我們從樸素貝葉斯算法入手,分析比較了幾種常見的生成模型(包括線性判別分析和二次判別分析)應用於多因子選股的異同,希望對本領域的投資者產生有實用意義的參考價值。
  • C#與人工智慧(第4講)創建樸素貝葉斯分類器
    今天,我給大家帶來C#與人工智慧的第4講——創建樸素貝葉斯分類器。#人工智慧#本文先實現一個簡單的貝葉斯分類器,輸入二進位,判斷0-7。後續文章會講述它的高級應用——貝葉斯推理機。樸素貝葉斯分類器首先,按第1講所述,安裝Visual Studio 2019編碼工具。然後,按第2講所述,創建一個Windows Form應用程式。然後,按第3講所述,下載安裝Accord插件。