常用機器學(xué)習(xí)算法優(yōu)缺點分析
編輯導(dǎo)語:機器學(xué)習(xí)是當(dāng)下數(shù)據(jù)分析領(lǐng)域的一個熱點內(nèi)容,我們?nèi)粘9ぷ髦卸喽嗌偕俣紩婕暗揭恍5跈C器學(xué)習(xí)領(lǐng)域,算法并不能完全解決所有的問題。本文梳理了有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)的兩個方面,列舉了其中幾種算法,總結(jié)它們的優(yōu)缺點,分享給你。
機器學(xué)習(xí)無疑是當(dāng)前數(shù)據(jù)分析領(lǐng)域的一個熱點內(nèi)容,其理論和方法已經(jīng)廣泛應(yīng)用于解決工程應(yīng)用的復(fù)雜問題,很多人在平時的工作中都或多或少會用到機器學(xué)習(xí)的算法。在機器學(xué)習(xí)領(lǐng)域,沒有算法能完美地解決所有問題。比如說,神經(jīng)網(wǎng)絡(luò)并不是在任何情況下都能比決策樹更有優(yōu)勢,反之亦然。它們要受很多因素的影響,比如你的數(shù)據(jù)集的規(guī)?;蚪Y(jié)構(gòu)。
其結(jié)果是,在用給定的測試集來評估性能并挑選算法時,你應(yīng)當(dāng)根據(jù)具體的問題來采用不同的算法。例如,如果模型要求可解釋性較強,首先想到的就是邏輯(線性)回歸,如果模型要求準(zhǔn)確度較高且速度較快,首先想到的是Xgboost,如果數(shù)據(jù)量巨大且很稀疏,首先想到怎么用神經(jīng)網(wǎng)絡(luò)解決此問題。
因此,如何選擇機器學(xué)習(xí)算法、選擇哪一個算法以及算法建模時該注意哪些問題成了工程師的一個難題,本文的目的總結(jié)了常用機器學(xué)習(xí)算法優(yōu)缺點,供大家在工作、學(xué)習(xí)甚至面試中參考。機器學(xué)習(xí)主要分為有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí),本文從這兩方面進(jìn)行了梳理。
一、有監(jiān)督算法
有監(jiān)督學(xué)習(xí)是指模型學(xué)習(xí)時有特定目標(biāo),即目標(biāo)是人工標(biāo)注的,主要用做分類或者回歸。常用的有監(jiān)督學(xué)習(xí)主要有knn、邏輯(線性)回歸、決策樹、隨機森林、adaboost、GBDT、xgboost、svm、樸素貝葉斯、人工神經(jīng)網(wǎng)絡(luò)等算法。
1. 最近鄰算法——KNN
KNN可以說是最簡單的分類算法,和另一種機器學(xué)習(xí)算法K均值算法有點像,但有著本質(zhì)區(qū)別(K均值算法是無監(jiān)督算法)。KNN的全稱是KNearestNeighbors,意思是K個最近的鄰居,KNN的原理就是當(dāng)預(yù)測一個新的值x的時候,根據(jù)它距離最近的K個點是什么類別來判斷x屬于哪個類別。
KNN算法的優(yōu)點:
- 理論成熟,簡單易用,相比其他算法,KNN算是比較簡潔明了的算法,工程上非常容易實現(xiàn);模型訓(xùn)練時間快,訓(xùn)練時間復(fù)雜度為O(n),KNN算法是惰性的;
- 對數(shù)據(jù)沒有假設(shè),準(zhǔn)確度高,對異常值不敏感。
KNN算法的缺點:
- 對內(nèi)存要求較高,因為該算法存儲了所有訓(xùn)練數(shù)據(jù);
- KNN每一次分類都會重新進(jìn)行一次全局運算,且對于樣本容量大的數(shù)據(jù)集計算量比較大(一般涉及到距離計算的模型都會有這種缺點,如后面講的SVM、密度聚類等)。
2. 邏輯(線性)回歸
邏輯回歸是分類模型,線性回歸是回歸模型,邏輯回歸和線性回歸原理相似,邏輯回歸其實僅為在線性回歸的基礎(chǔ)上,套用了一個邏輯函數(shù)。
線性回歸的損失函數(shù)為均方誤差類損失,邏輯回歸的損失函數(shù)為交叉熵?fù)p失。
邏輯回歸的損失函數(shù)為什么選擇交叉熵?fù)p失而不選擇均方誤差是面試中經(jīng)常問道的問題,這里簡單說一下:使用MSE作為損失函數(shù)的話,它的梯度是和sigmod函數(shù)的導(dǎo)數(shù)有關(guān)的,如果當(dāng)前模型的輸出接近0或者1時,就會非常小,接近0,使得求得的梯度很小,損失函數(shù)收斂的很慢。
但是我們使用交叉熵的話就不會出現(xiàn)這樣的情況,它的導(dǎo)數(shù)就是一個差值,誤差大的話更新的就快,誤差小的話就更新的慢點,這正是我們想要的邏輯(線性)回歸的優(yōu)點:
- 可解釋行強。本人認(rèn)為這是邏輯(線性)回歸最大的優(yōu)點,應(yīng)該是機器學(xué)習(xí)算法中可解釋最強的,因為它訓(xùn)練的參數(shù)即為每個特征的權(quán)重,并且能夠定位到每個樣本的可解釋,而且它的輸出為概率值;
- 計算量小,速度很快,存儲資源低,工程上實現(xiàn)簡單,廣泛應(yīng)用于工業(yè)界。
邏輯(線性)回歸的缺點:
它最大的缺點就是對特征工程要求較高,主要體現(xiàn)在以下方面:
- 需要解決特征共線性問題,如果特征共線性較高,訓(xùn)練的權(quán)重不滿秩,有模型不收斂的可能;對于異常值和缺失值非常敏感,需要提前進(jìn)行數(shù)據(jù)處理;
- 模型訓(xùn)練前需要特征歸一化,不然進(jìn)行梯度下降尋找最優(yōu)值時會收斂很慢或者不收斂;
- 對于非線性連續(xù)特征需要連續(xù)特征離散化。
當(dāng)然除了以上缺點,還有它的容易欠擬合,準(zhǔn)確度并不是很高(個人認(rèn)為強于決策樹,弱于SVM、GBDT等強分類器)。
3. 決策樹
決策樹的生成算法有ID3,C4.5和C5.0等。決策樹是一種樹形結(jié)構(gòu),其中每個內(nèi)部節(jié)點表示一個屬性上的判斷,每個分支代表一個判斷結(jié)果的輸出,最后每個葉節(jié)點代表一種分類結(jié)果。
決策樹的優(yōu)點:
計算量相對較小,且容易轉(zhuǎn)化成分類規(guī)則.只要沿著樹根向下一直走到葉,沿途的分裂條件就能夠唯一確定一條分類的謂詞;有一定的可解釋性,樹的結(jié)構(gòu)可視化;
具有一定的特征選擇能力,能夠自己處理不相關(guān)特征。
決策樹的缺點:
- 屬于弱分類器,且容易過擬合,可用bagging的方式減小方差(如隨機森林),boosting的方式減少偏差(如GBDT、xgboost);于各類別樣本數(shù)量不一致的數(shù)據(jù),信息增益偏向于那些更多數(shù)值的特征;
- 容易忽略數(shù)據(jù)集中屬性的相互關(guān)聯(lián)。
4. 隨機森林
是以決策樹為基學(xué)習(xí)器的集成學(xué)習(xí)算法,如果分類模型,多個決策樹進(jìn)行投票處理,如果為回歸模型,多個決策樹結(jié)果平均值處理。
隨機森林的優(yōu)點:
- 隨機森林具有防止過擬合能力,精度比大多數(shù)單個算法要好;隨機森林分類器可以處理缺失值;
- 于有袋外數(shù)據(jù)(OOB),可以在模型生成過程中取得真實誤差的無偏估計,且不損失訓(xùn)練數(shù)據(jù)量在訓(xùn)練過程中,能夠檢測到feature間的互相影響,且可以得出feature的重要性,具有一定參考意義;
- 每棵樹可以獨立、同時生成,容易做成并行化方法;
- 具有一定的特征選擇能力。
隨機森林的缺點:
隨機森林已經(jīng)被證明在某些噪音較大的分類或回歸問題上會過擬。對于有不同取值的屬性的數(shù)據(jù),取值劃分較多的屬性會對隨機森林產(chǎn)生更大的影響,所以隨機森林在這種數(shù)據(jù)上產(chǎn)出的屬性權(quán)值是不可信的。
5. GBDT
GBDT是通過采用加法模型(即基函數(shù)的線性組合),以及不斷減小訓(xùn)練過程產(chǎn)生的殘差來達(dá)到將數(shù)據(jù)分類或者回歸的算法,它是決策樹的boosting算法,在傳統(tǒng)機器學(xué)習(xí)算法里面是對真實分布擬合的最好的幾種算法之一。
GBDT的優(yōu)點:
- GBDT屬于強分類器,一般情況下比邏輯回歸和決策樹預(yù)測精度要高;GBDT可以自己選擇損失函數(shù),當(dāng)損失函數(shù)為指數(shù)函數(shù)時,GBDT變?yōu)锳daboost算法;
- GBDT可以做特征組合,往往在此基礎(chǔ)上和其他分類器進(jìn)行配合。
GBDT的缺點:
由于弱學(xué)習(xí)器之間存在依賴關(guān)系,難以并行訓(xùn)練數(shù)據(jù);和其他樹模型一樣,不適合高維稀疏特征。
6. Xgboost
XGBoost的全稱是eXtremeGradientBoosting,它是經(jīng)過優(yōu)化的分布式梯度提升庫,旨在高效、靈活且可移植。
XGBoost是大規(guī)模并行boostingtree的工具,它是目前最快最好的開源boostingtree工具包,比常見的工具包快10倍以上。
在數(shù)據(jù)科學(xué)方面,有大量的Kaggle選手選用XGBoost進(jìn)行數(shù)據(jù)挖掘比賽,是各大數(shù)據(jù)科學(xué)比賽的必殺武器;在工業(yè)界大規(guī)模數(shù)據(jù)方面,XGBoost的分布式版本有廣泛的可移植性,支持在Kubernetes、Hadoop、SGE、MPI、Dask等各個分布式環(huán)境上運行,使得它可以很好地解決工業(yè)界大規(guī)模數(shù)據(jù)的問題。它是GBDT的進(jìn)階,也就是Xgboost有著GBDT所有的優(yōu)點。
此外與GBDT相比,xgBoosting有以下進(jìn)步:
收斂速度增快:GBDT在優(yōu)化時只用到一階導(dǎo)數(shù),xgBoosting對代價函數(shù)做了二階Talor展開,引入了一階導(dǎo)數(shù)和二階導(dǎo)數(shù);
正則化:一定程度防止過擬合。XGBoost在代價函數(shù)里加入了正則項,用于控制模型的復(fù)雜度。正則項里包含了樹的葉子節(jié)點個數(shù)、每個葉子節(jié)點上輸出的score的L2模的平方和。
從Bias-variancetradeoff角度來講,正則項降低了模型的variance,使學(xué)習(xí)出來的模型更加簡單,防止過擬合;
并行處理:XGBoost工具支持并行。Boosting不是一種串行的結(jié)構(gòu)嗎?怎么并行的?
注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能進(jìn)行下一次迭代的(第t次迭代的代價函數(shù)里包含了前面t-1次迭代的預(yù)測值)。XGBoost的并行是在特征粒度上的。
我們知道,決策樹的學(xué)習(xí)最耗時的一個步驟就是對特征的值進(jìn)行排序(因為要確定最佳分割點),XGBoost在訓(xùn)練之前,預(yù)先對數(shù)據(jù)進(jìn)行了排序,然后保存為block結(jié)構(gòu),后面的迭代中重復(fù)地使用這個結(jié)構(gòu),大大減小計算量。
這個block結(jié)構(gòu)也使得并行成為了可能,在進(jìn)行節(jié)點的分裂時,需要計算每個特征的增益,最終選增益最大的那個特征去做分裂,那么各個特征的增益計算就可以開多線程進(jìn)行;
Shrinkage(縮減):相當(dāng)于學(xué)習(xí)速率。XGBoost在進(jìn)行完一次迭代后,會將葉子節(jié)點的權(quán)重乘上該系數(shù),主要是為了削弱每棵樹的影響,讓后面有更大的學(xué)習(xí)空間。傳統(tǒng)GBDT的實現(xiàn)也有學(xué)習(xí)速率。
列抽樣:XGBoost借鑒了隨機森林的做法,支持列抽樣,不僅能降低過擬合,還能減少計算。這也是XGBoost異于傳統(tǒng)GBDT的一個特性。
缺失值處理:對于特征的值有缺失的樣本,XGBoost采用的稀疏感知算法可以自動學(xué)習(xí)出它的分裂方向;
內(nèi)置交叉驗證:XGBoost允許在每一輪Boosting迭代中使用交叉驗證。
因此,可以方便地獲得最優(yōu)Boosting迭代次數(shù)。而GBM使用網(wǎng)格搜索,只能檢測有限個值。
Xgboost缺點:和其他樹模型一樣,不適合高維稀疏特征;算法參數(shù)過多,調(diào)參復(fù)雜,需要對XGBoost原理十分清楚才能很好的使用XGBoost。
7. SVM
SVM即支持向量機,它是將向量映射到一個更高維的空間里,在這個空間里建立有一個最大間隔超平面。在分開數(shù)據(jù)的超平面的兩邊建有兩個互相平行的超平面,分隔超平面使兩個平行超平面的距離最大化。假定平行超平面間的距離或差距越大,分類器的總誤差越小。
SVM的優(yōu)點:
使用核函數(shù)可以向高維空間進(jìn)行映射;屬于強分類器,準(zhǔn)確的較高;
能夠處理非線性特征的相互作用。
SVM的缺點:
SVM最大的缺點,本人認(rèn)為會耗費大量的機器內(nèi)存和運算時間,這也是為什么隨著數(shù)據(jù)量越來越多,SVM在工業(yè)界運用越來越少的原因;對缺失數(shù)據(jù)敏感;對非線性問題沒有通用解決方案,有時候很難找到一個合適的核函數(shù)。
8. 樸素貝葉斯算法
樸素貝葉斯算法是基于貝葉斯定理和特征條件獨立假設(shè)的分類方法,屬于生成式模型。
樸素貝葉斯的優(yōu)點:
- 樸素貝葉斯模型發(fā)源于古典數(shù)學(xué)理論,有著堅實的數(shù)學(xué)基礎(chǔ),以及穩(wěn)定的分類效率;對大數(shù)量訓(xùn)練和查詢時具有較高的速度。
- 即使使用超大規(guī)模的訓(xùn)練集,針對每個項目通常也只會有相對較少的特征數(shù),并且對項目的訓(xùn)練和分類也僅僅是特征概率的數(shù)學(xué)運算而已;
- 對小規(guī)模的數(shù)據(jù)表現(xiàn)很好,能個處理多分類任務(wù),適合增量式訓(xùn)練(即可以實時的對新增的樣本進(jìn)行訓(xùn)練;
- 對缺失數(shù)據(jù)不太敏感,算法也比較簡單,常用于文本分類;
- 樸素貝葉斯對結(jié)果解釋容易理解。
樸素貝葉斯的缺點:
理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上并非總是如此,這是因為樸素貝葉斯模型假設(shè)屬性之間是相互獨立的,而這個假設(shè)在實際應(yīng)用中往往并不成立的。
雖然在屬性相關(guān)性較小時,樸素貝葉斯性能良好。但是,在屬性個數(shù)比較多或者屬性之間相關(guān)性較大時,分類效果并不好;需要知道先驗概率,并且先驗概率在很多時候多是取決于假設(shè),假設(shè)的模型可以有多種,從而導(dǎo)致在某些時候會由于假設(shè)的先驗?zāi)P投沟妙A(yù)測效果不佳。
因為是通過先驗和數(shù)據(jù)來決定后驗的概率來決定分類的,所以分類決策存在一定的錯誤率;對輸入數(shù)據(jù)的表達(dá)形式很敏感。
9. 人工神經(jīng)網(wǎng)絡(luò)
以上都是傳統(tǒng)有監(jiān)督機器學(xué)習(xí)算法,但傳統(tǒng)的機器學(xué)習(xí)算法在數(shù)據(jù)量面前,會觸及一個天花板,一旦到達(dá)極限,傳統(tǒng)機器學(xué)習(xí)算法將無法跟上數(shù)據(jù)增長的步伐,性能則停滯不前。而數(shù)據(jù)越多,神經(jīng)網(wǎng)絡(luò)越浪!隨著現(xiàn)在數(shù)據(jù)量越來越多,人工神經(jīng)網(wǎng)絡(luò)運用越來越廣泛。
人工神經(jīng)網(wǎng)絡(luò)的優(yōu)點:
- 可以充分逼近任意復(fù)雜的非線性關(guān)系;所有定量或定性的信息都等勢分布貯存于網(wǎng)絡(luò)內(nèi)的各神經(jīng)元,故有很強的魯棒性和容錯性;
- 采用并行分布處理方法,使得快速進(jìn)行大量運算成為可能;
- 可學(xué)習(xí)和自適應(yīng)不知道或不確定的系統(tǒng);
- 能夠同時處理定量、定性知識。
人工神經(jīng)網(wǎng)絡(luò)的缺點:
- 黑盒過程,不能觀察之間的學(xué)習(xí)過程,輸出結(jié)果難以解釋,會影響到結(jié)果的可信度和可接受程度;學(xué)習(xí)時間過長,有可能陷入局部極小值,甚至可能達(dá)不到學(xué)習(xí)的目的;
- 神經(jīng)網(wǎng)絡(luò)需要大量的參數(shù),如網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、權(quán)值和閾值的初始值。
二、無監(jiān)督算法
無監(jiān)督學(xué)習(xí)輸入數(shù)據(jù)沒有被標(biāo)記,也沒有確定的結(jié)果,樣本數(shù)據(jù)類別未知,需要根據(jù)樣本間的相似性對樣本集進(jìn)行分類。常用的無監(jiān)督模型主要指各種聚類,主要有K均值聚類、層次聚類、密度聚類等。
1. K均值聚類
K-Means的主要優(yōu)點:
原理簡單,容易實現(xiàn);可解釋度較強。
K-Means的主要缺點:
- K值很難確定;聚類效果依賴于聚類中心的初始化,收斂到局部最優(yōu);
- 對噪音和異常點敏感;
- 對于非凸數(shù)據(jù)集或類別規(guī)模差異太大的數(shù)據(jù)效果不好。
2. 密度聚類
密度聚類優(yōu)點:
- 可以對任意形狀的稠密數(shù)據(jù)集進(jìn)行聚類,相對的K均值之類的聚類算法一般只適用于凸數(shù)據(jù)集;可以在聚類的同時發(fā)現(xiàn)異常點,對數(shù)據(jù)集中的異常點不敏感;
- 聚類結(jié)果沒有偏倚,相對的,K-Means之類的聚類算法初始值對聚類結(jié)果有很大影響。
密度聚類缺點:
- 如果樣本集的密度不均勻、聚類間距差相差很大時,聚類質(zhì)量較差,這時用DBSCAN聚類一般不適合;如果樣本集較大時,聚類收斂時間較長,此時可以對搜索最近鄰時建立的KD樹或者球樹進(jìn)行規(guī)模限制來改進(jìn);
- 調(diào)參相對于傳統(tǒng)的K-Means之類的聚類算法稍復(fù)雜,主要需要對距離閾值?,鄰域樣本數(shù)閾值MinPts聯(lián)合調(diào)參,不同的參數(shù)組合對最后的聚類效果有較大影響。
3. 層次聚類
層次聚類優(yōu)點:
- 距離和規(guī)則的相似度容易定義,限制少。不需要預(yù)先制定聚類數(shù)。
- 可以發(fā)現(xiàn)類的層次關(guān)系。
- 可以聚類成其它形狀。
層次聚類的缺點:
- 計算復(fù)雜度太高。奇異值也能產(chǎn)生很大影響。
- 算法很可能聚類成鏈狀。
三、總述
總之,選擇哪一個算法必須要適用于你自己的問題,這就要求選擇正確的機器學(xué)習(xí)任務(wù)。但很多情況下好的數(shù)據(jù)卻要優(yōu)于好的算法,設(shè)計優(yōu)良特征和做特征工程更有意義,但只有了解每個機器算法的原理及優(yōu)缺點,才能根據(jù)不同的機器學(xué)習(xí)算法做相應(yīng)的特征工程(對特征工程感興趣的同學(xué)可以參考我在公眾號一個數(shù)據(jù)人的自留地寫的另一篇文章:機器學(xué)習(xí)中的特征工程)。
作者:飛狐沖沖,在國內(nèi)知名央企負(fù)責(zé)AI算法建模類工作;曾經(jīng)在京東、美團(tuán)等大型互聯(lián)網(wǎng)公司擔(dān)任算法工程師的崗位;具有豐富的算法開發(fā)經(jīng)驗;“數(shù)據(jù)人創(chuàng)作者聯(lián)盟”成員。
本文由@一個數(shù)據(jù)人的自留地 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議。
專欄作家
一個數(shù)據(jù)人的自留地,公眾號:一個數(shù)據(jù)人的自留地。人人都是產(chǎn)品經(jīng)理專欄作家,《數(shù)據(jù)產(chǎn)品經(jīng)理修煉手冊》作者。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議。
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。
任何事物都具有兩面性,如何取其利,避其害,是我們要不斷學(xué)習(xí)的東西