關(guān)于這個問題我今天正好看到了這個文章葵礼。講的正是各個算法的優(yōu)劣分析号阿,很中肯。
https://zhuanlan.zhihu.com/p/25327755正好14年的時候有人做過一個實驗[1]鸳粉,比較在不同數(shù)據(jù)集上(121個)扔涧,不同的分類器(179個)的實際效果。
論文題為:Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?
實驗時間有點早届谈,我嘗試著結(jié)合我自己的理解枯夜、一些最近的實驗,來談一談吧艰山。主要針對分類器(Classifier)卤档。
沒有最好的分類器,只有最合適的分類器程剥。
隨機森林平均來說最強劝枣,但也只在9.9%的數(shù)據(jù)集上拿到了第一汤踏,優(yōu)點是鮮有短板。
SVM的平均水平緊隨其后舔腾,在10.7%的數(shù)據(jù)集上拿到第一溪胶。
神經(jīng)網(wǎng)絡(luò)(13.2%)和boosting(~9%)表現(xiàn)不錯。
數(shù)據(jù)維度越高稳诚,隨機森林就比AdaBoost強越多哗脖,但是整體不及SVM[2]。
數(shù)據(jù)量越大扳还,神經(jīng)網(wǎng)絡(luò)就越強才避。
近鄰 (Nearest Neighbor)
它的特點是完全跟著數(shù)據(jù)走俏让,沒有數(shù)學模型可言楞遏。
適用情景:
需要一個特別容易解釋的模型的時候。
比如需要向用戶解釋原因的推薦算法首昔。
貝葉斯 (Bayesian)
是相對容易理解的一個模型勒奇,至今依然被垃圾郵件過濾器使用预鬓。
適用情景:
需要一個比較容易解釋,而且不同維度之間相關(guān)性較小的模型的時候赊颠。
可以高效處理高維數(shù)據(jù)珊皿,雖然結(jié)果可能不盡如人意。
決策樹 (Decision tree)
雖然生成的樹不容易給用戶看草添,但是數(shù)據(jù)分析的時候驶兜,通過觀察樹的上層結(jié)構(gòu),能夠?qū)Ψ诸惼鞯暮诵乃悸酚幸粋€直觀的感受远寸。
舉個簡單的例子抄淑,當我們預測一個孩子的身高的時候,決策樹的第一層可能是這個孩子的性別。男生走左邊的樹進行進一步預測,女生則走右邊的樹卷谈。這就說明性別對身高有很強的影響梁沧。
適用情景:
因為它能夠生成清晰的基于特征(feature)選擇不同預測結(jié)果的樹狀結(jié)構(gòu)合蔽,數(shù)據(jù)分析師希望更好的理解手上的數(shù)據(jù)的時候往往可以使用決策樹奇昙。
同時它也是相對容易被攻擊的分類器[3]陶珠。這里的攻擊是指人為的改變一些特征畜隶,使得分類器判斷錯誤犯犁。常見于垃圾郵件躲避檢測中属愤。因為決策樹最終在底層判斷是基于單個條件的,攻擊者往往只需要改變很少的特征就可以逃過監(jiān)測酸役。
受限于它的簡單性住诸,決策樹更大的用處是作為一些更有用的算法的基石。
隨機森林 (Random forest)
嚴格來說入桂,隨機森林其實算是一種集成算法奄薇。它首先隨機選取不同的特征(feature)和訓練樣本(training sample),生成大量的決策樹事格,然后綜合這些決策樹的結(jié)果來進行最終的分類。
隨機森林在現(xiàn)實分析中被大量使用搞隐,它相對于決策樹驹愚,在準確性上有了很大的提升,同時一定程度上改善了決策樹容易被攻擊的特點劣纲。
適用情景:
數(shù)據(jù)維度相對低(幾十維)逢捺,同時對準確性有較高要求時。
因為不需要很多參數(shù)調(diào)整就可以達到不錯的效果癞季,基本上不知道用什么方法的時候都可以先試一下隨機森林劫瞳。
SVM (Support vector machine)
最早的SVM是平面的,局限很大废睦。但是利用核函數(shù)(kernel function)伺绽,我們可以把平面投射(mapping)成曲面,進而大大提高SVM的適用范圍嗜湃。
適用情景:
SVM在很多數(shù)據(jù)集上都有優(yōu)秀的表現(xiàn)购披。
相對來說杖挣,SVM盡量保持與樣本間距離的性質(zhì)導致它抗攻擊的能力更強。
和隨機森林一樣刚陡,這也是一個拿到數(shù)據(jù)就可以先嘗試一下的算法惩妇。
邏輯斯蒂回歸 (Logistic regression)
回歸方法的核心就是為函數(shù)找到最合適的參數(shù)褒翰,使得函數(shù)的值和樣本的值最接近。例如線性回歸(Linear regression)就是對于函數(shù)f(x)=ax+b匀泊,找到最合適的a,b优训。
LR擬合的就不是線性函數(shù)了,它擬合的是一個概率學中的函數(shù)各聘,f(x)的值這時候就反映了樣本屬于這個類的概率揣非。
適用情景:
LR同樣是很多分類算法的基礎(chǔ)組件,它的好處是輸出值自然地落在0到1之間躲因,并且有概率意義早敬。
因為它本質(zhì)上是一個線性的分類器,所以處理不好特征之間相關(guān)的情況大脉。
雖然效果一般搞监,卻勝在模型清晰,背后的概率學經(jīng)得住推敲镰矿。它擬合出來的參數(shù)就代表了每一個特征(feature)對結(jié)果的影響琐驴。也是一個理解數(shù)據(jù)的好工具。
判別分析 (Discriminant analysis)
判別分析的典型例子是線性判別分析(Linear discriminant analysis)牢酵,簡稱LDA。
(這里注意不要和隱含狄利克雷分布(Latent Dirichlet allocation)弄混衙猪,雖然都叫LDA但說的不是一件事茁帽。)
LDA的核心思想是把高維的樣本投射(project)到低維上,如果要分成兩類屈嗤,就投射到一維潘拨。要分三類就投射到二維平面上。這樣的投射當然有很多種不同的方式饶号,LDA投射的標準就是讓同類的樣本盡量靠近铁追,而不同類的盡量分開。對于未來要預測的樣本茫船,用同樣的方式投射之后就可以輕易地分辨類別了琅束。
使用情景:
判別分析適用于高維數(shù)據(jù)需要降維的情況扭屁,自帶降維功能使得我們能方便地觀察樣本分布。它的正確性有數(shù)學公式可以證明涩禀,所以同樣是很經(jīng)得住推敲的方式料滥。
但是它的分類準確率往往不是很高,所以不是統(tǒng)計系的人就把它作為降維工具用吧艾船。
同時注意它是假定樣本成正態(tài)分布的葵腹,所以那種同心圓形的數(shù)據(jù)就不要嘗試了。
神經(jīng)網(wǎng)絡(luò) (Neural network)
神經(jīng)網(wǎng)絡(luò)現(xiàn)在是火得不行啊屿岂。它的核心思路是利用訓練樣本(training sample)來逐漸地完善參數(shù)践宴。還是舉個例子預測身高的例子,如果輸入的特征中有一個是性別(1:男爷怀;0:女)阻肩,而輸出的特征是身高(1:高;0:矮)运授。那么當訓練樣本是一個個子高的男生的時候烤惊,在神經(jīng)網(wǎng)絡(luò)中,從“男”到“高”的路線就會被強化吁朦。同理柒室,如果來了一個個子高的女生,那從“女”到“高”的路線就會被強化喇完。
最終神經(jīng)網(wǎng)絡(luò)的哪些路線比較強伦泥,就由我們的樣本所決定剥啤。
神經(jīng)網(wǎng)絡(luò)的優(yōu)勢在于锦溪,它可以有很多很多層。如果輸入輸出是直接連接的府怯,那它和LR就沒有什么區(qū)別刻诊。但是通過大量中間層的引入,它就能夠捕捉很多輸入特征之間的關(guān)系牺丙。卷積神經(jīng)網(wǎng)絡(luò)有很經(jīng)典的不同層的可視化展示(visulization)则涯,我這里就不贅述了。
神經(jīng)網(wǎng)絡(luò)的提出其實很早了冲簿,但是它的準確率依賴于龐大的訓練集粟判,原本受限于計算機的速度,分類效果一直不如隨機森林和SVM這種經(jīng)典算法峦剔。
使用情景:
數(shù)據(jù)量龐大档礁,參數(shù)之間存在內(nèi)在聯(lián)系的時候。
當然現(xiàn)在神經(jīng)網(wǎng)絡(luò)不只是一個分類器吝沫,它還可以用來生成數(shù)據(jù)呻澜,用來做降維递礼,這些就不在這里討論了。
Rule-based methods
這個我是真不熟羹幸,都不知道中文翻譯是什么脊髓。
它里面典型的算法是C5.0 Rules,一個基于決策樹的變體栅受。因為決策樹畢竟是樹狀結(jié)構(gòu)将硝,理解上還是有一定難度。所以它把決策樹的結(jié)果提取出來窘疮,形成一個一個兩三個條件組成的小規(guī)則袋哼。
使用情景:
它的準確度比決策樹稍低,很少見人用闸衫。大概需要提供明確小規(guī)則來解釋決定的時候才會用吧涛贯。
提升算法(Boosting)
接下來講的一系列模型,都屬于集成學習算法(Ensemble Learning)蔚出,基于一個核心理念:三個臭皮匠弟翘,頂個諸葛亮。
翻譯過來就是:當我們把多個較弱的分類器結(jié)合起來的時候骄酗,它的結(jié)果會比一個強的分類器更
典型的例子是AdaBoost稀余。
AdaBoost的實現(xiàn)是一個漸進的過程,從一個最基礎(chǔ)的分類器開始趋翻,每次尋找一個最能解決當前錯誤樣本的分類器睛琳。用加權(quán)取和(weighted sum)的方式把這個新分類器結(jié)合進已有的分類器中。
它的好處是自帶了特征選擇(feature selection)踏烙,只使用在訓練集中發(fā)現(xiàn)有效的特征(feature)师骗。這樣就降低了分類時需要計算的特征數(shù)量,也在一定程度上解決了高維數(shù)據(jù)難以理解的問題讨惩。
最經(jīng)典的AdaBoost實現(xiàn)中辟癌,它的每一個弱分類器其實就是一個決策樹。這就是之前為什么說決策樹是各種算法的基石荐捻。
使用情景:
好的Boosting算法黍少,它的準確性不遜于隨機森林。雖然在[1]的實驗中只有一個擠進前十处面,但是實際使用中它還是很強的厂置。因為自帶特征選擇(feature selection)所以對新手很友好,是一個“不知道用什么就試一下它吧”的算法魂角。
裝袋算法(Bagging)
同樣是弱分類器組合的思路昵济,相對于Boosting,其實Bagging更好理解。它首先隨機地抽取訓練集(training set)砸紊,以之為基礎(chǔ)訓練多個弱分類器传于。然后通過取平均,或者投票(voting)的方式?jīng)Q定最終的分類結(jié)果醉顽。
因為它隨機選取訓練集的特點沼溜,Bagging可以一定程度上避免過渡擬合(overfit)。
在[1]中游添,最強的Bagging算法是基于SVM的系草。如果用定義不那么嚴格的話,隨機森林也算是Bagging的一種唆涝。
使用情景:
相較于經(jīng)典的必使算法找都,Bagging使用的人更少一些。一部分的原因是Bagging的效果和參數(shù)的選擇關(guān)系比較大廊酣,用默認參數(shù)往往沒有很好的效果能耻。
雖然調(diào)對參數(shù)結(jié)果會比決策樹和LR好,但是模型也變得復雜了亡驰,沒事有特別的原因就別用它了晓猛。
Stacking
這個我是真不知道中文怎么說了。它所做的是在多個分類器的結(jié)果上凡辱,再套一個新的分類器戒职。
這個新的分類器就基于弱分類器的分析結(jié)果,加上訓練標簽(training label)進行訓練透乾。一般這最后一層用的是LR洪燥。
Stacking在[1]里面的表現(xiàn)不好,可能是因為增加的一層分類器引入了更多的參數(shù)乳乌,也可能是因為有過渡擬合(overfit)的現(xiàn)象捧韵。
使用情景:
沒事就別用了。
(修訂:@莊巖
提醒說stacking在數(shù)據(jù)挖掘競賽的網(wǎng)站kaggle上很火钦扭,相信參數(shù)調(diào)得好的話還是對結(jié)果能有幫助的纫版。
http://blog.kaggle.com/2016/12/27/a-kagglers-guide-to-model-stacking-in-practice/**
這篇文章很好地介紹了stacking的好處床绪。在kaggle這種一點點提升就意味著名次不同的場合下客情,stacking還是很有效的,但是對于一般商用癞己,它所帶來的提升就很難值回額外的復雜度了膀斋。)
多專家模型(Mixture of Experts)
最近這個模型還挺流行的,主要是用來合并神經(jīng)網(wǎng)絡(luò)的分類結(jié)果痹雅。我也不是很熟仰担,對神經(jīng)網(wǎng)絡(luò)感興趣,而且訓練集異質(zhì)性(heterogeneity)比較強的話可以研究一下這個绩社。
講到這里分類器其實基本說完了摔蓝。講一下問題里面其他一些名詞吧赂苗。
最大熵模型 (Maximum entropy model)
最大熵模型本身不是分類器,它一般是用來判斷模型預測結(jié)果的好壞的贮尉。
對于它來說拌滋,分類器預測是相當于是:針對樣本,給每個類一個出現(xiàn)概率猜谚。比如說樣本的特征是:性別男败砂。我的分類器可能就給出了下面這樣一個概率:高(60%),矮(40%)魏铅。
而如果這個樣本真的是高的昌犹,那我們就得了一個分數(shù)60%。最大熵模型的目標就是讓這些分數(shù)的乘積盡量大览芳。
LR其實就是使用最大熵模型作為優(yōu)化目標的一個算法[4]斜姥。
EM
就像最大熵模型一樣,EM不是分類器沧竟,而是一個思路疾渴。很多算法都是基于這個思路實現(xiàn)的。
@劉奕馳 已經(jīng)講得很清楚了屯仗,我就不多說了搞坝。
隱馬爾科夫 (Hidden Markov model)
這是一個基于序列的預測方法,核心思想就是通過上一個(或幾個)狀態(tài)預測下一個狀態(tài)魁袜。
之所以叫“隱”馬爾科夫是因為它的設(shè)定是狀態(tài)本身我們是看不到的桩撮,我們只能根據(jù)狀態(tài)生成的結(jié)果序列來學習可能的狀態(tài)。
適用場景:
可以用于序列的預測峰弹,可以用來生成序列店量。
條件隨機場 (Conditional random field)
典型的例子是linear-chain CRF。
具體的使用 @Aron 有講鞠呈,我就不獻丑了融师,因為我從來沒用過這個。
就是這些啦蚁吝。
相關(guān)的文章:
[1]: Do we need hundreds of classifiers to solve real world classification problems.
Fernández-Delgado, Manuel, et al. J. Mach. Learn. Res 15.1 (2014)
[2]: An empirical evaluation of supervised learning in high dimensions.
Rich Caruana, Nikos Karampatziakis, and Ainur Yessenalina. ICML '08
[3]: Man vs. Machine: Practical Adversarial Detection of Malicious Crowdsourcing Workers
Wang, G., Wang, T., Zheng, H., & Zhao, B. Y. Usenix Security'14
[4]: http://www.win-vector.com/dfiles/LogisticRegressionMaxEnt.pdf**