etc的常见算法_(转)8种常见机器学习算法比较
機(jī)器學(xué)習(xí)算法太多了,分類(lèi)、回歸、聚類(lèi)、推薦、圖像識(shí)別領(lǐng)域等等,要想找到一個(gè)合適算法真的不容易,所以在實(shí)際應(yīng)用中,我們一般都是采用啟發(fā)式學(xué)習(xí)方式來(lái)實(shí)驗(yàn)。通常最開(kāi)始我們都會(huì)選擇大家普遍認(rèn)同的算法,諸如SVM,GBDT,Adaboost,現(xiàn)在深度學(xué)習(xí)很火熱,神經(jīng)網(wǎng)絡(luò)也是一個(gè)不錯(cuò)的選擇。假如你在乎精度(accuracy)的話(huà),最好的方法就是通過(guò)交叉驗(yàn)證(cross-validation)對(duì)各個(gè)算法一個(gè)個(gè)地進(jìn)行測(cè)試,進(jìn)行比較,然后調(diào)整參數(shù)確保每個(gè)算法達(dá)到最優(yōu)解,最后選擇最好的一個(gè)。但是如果你只是在尋找一個(gè)“足夠好”的算法來(lái)解決你的問(wèn)題,或者這里有些技巧可以參考,下面來(lái)分析下各個(gè)算法的優(yōu)缺點(diǎn),基于算法的優(yōu)缺點(diǎn),更易于我們?nèi)ミx擇它。
偏差&方差
偏差:描述的是預(yù)測(cè)值(估計(jì)值)的期望E’與真實(shí)值Y之間的差距。偏差越大,越偏離真實(shí)數(shù)據(jù)。
當(dāng)然,你也可以認(rèn)為這是生成模型(NB)與判別模型(KNN)的一個(gè)區(qū)別。
以下內(nèi)容引自知乎:
由于訓(xùn)練樣本很少(至少不足夠多),所以通過(guò)訓(xùn)練集得到的模型,總不是真正正確的。(就算在訓(xùn)練集上正確率100%,也不能說(shuō)明它刻畫(huà)了真實(shí)的數(shù)據(jù)分布, 要知道刻畫(huà)真實(shí)的數(shù)據(jù)分布才是我們的目的,而不是只刻畫(huà)訓(xùn)練集的有限的數(shù)據(jù)點(diǎn))。而且,實(shí)際中,訓(xùn)練樣本往往還有一定的噪音誤差,所以如果太追求在訓(xùn)練集 上的完美而采用一個(gè)很復(fù)雜的模型,會(huì)使得模型把訓(xùn)練集里面的誤差都當(dāng)成了真實(shí)的數(shù)據(jù)分布特征,從而得到錯(cuò)誤的數(shù)據(jù)分布估計(jì)。這樣的話(huà),到了真正的測(cè)試集上 就錯(cuò)的一塌糊涂了(這種現(xiàn)象叫過(guò)擬合)。但是也不能用太簡(jiǎn)單的模型,否則在數(shù)據(jù)分布比較復(fù)雜的時(shí)候,模型就不足以刻畫(huà)數(shù)據(jù)分布了(體現(xiàn)為連在訓(xùn)練集上的錯(cuò) 誤率都很高,這種現(xiàn)象較欠擬合)。過(guò)擬合表明采用的模型比真實(shí)的數(shù)據(jù)分布更復(fù)雜,而欠擬合表示采用的模型比真實(shí)的數(shù)據(jù)分布要簡(jiǎn)單。
所以,這樣就容易分析樸素貝葉斯了。它簡(jiǎn)單的假設(shè)了各個(gè)數(shù)據(jù)之間是無(wú)關(guān)的,是一個(gè)被嚴(yán)重簡(jiǎn)化了的模型。所以,對(duì)于這樣一個(gè)簡(jiǎn)單模型,大部分場(chǎng)合都會(huì)Bias部分大于Variance部分,也就是說(shuō)高偏差而低方差。
偏差和方差與模型復(fù)雜度的關(guān)系使用下圖更加明了:
常見(jiàn)算法優(yōu)缺點(diǎn)
樸素貝葉斯屬于生成式模型(關(guān)于生成模型和判別式模型,主要還是在于是否是要求聯(lián)合分布),非常簡(jiǎn)單,你只是做了一堆計(jì)數(shù)。如果注有條件獨(dú)立性假設(shè)(一個(gè) 比較嚴(yán)格的條件),樸素貝葉斯分類(lèi)器的收斂速度將快于判別模型,如邏輯回歸,所以你只需要較少的訓(xùn)練數(shù)據(jù)即可。即使NB條件獨(dú)立假設(shè)不成立,NB分類(lèi)器在 實(shí)踐中仍然表現(xiàn)的很出色。它的主要缺點(diǎn)是它不能學(xué)習(xí)特征間的相互作用,用mRMR中R來(lái)講,就是特征冗余。引用一個(gè)比較經(jīng)典的例子,比如,雖然你喜歡 Brad Pitt和Tom Cruise的電影,但是它不能學(xué)習(xí)出你不喜歡他們?cè)谝黄鹧莸碾娪啊?/p>
樸素貝葉斯模型發(fā)源于古典數(shù)學(xué)理論,有著堅(jiān)實(shí)的數(shù)學(xué)基礎(chǔ),以及穩(wěn)定的分類(lèi)效率。
對(duì)小規(guī)模的數(shù)據(jù)表現(xiàn)很好,能個(gè)處理多分類(lèi)任務(wù),適合增量式訓(xùn)練;
對(duì)缺失數(shù)據(jù)不太敏感,算法也比較簡(jiǎn)單,常用于文本分類(lèi)。
需要計(jì)算先驗(yàn)概率;
分類(lèi)決策存在錯(cuò)誤率;
對(duì)輸入數(shù)據(jù)的表達(dá)形式很敏感。
屬于判別式模型,有很多正則化模型的方法(L0, L1,L2,etc),而且你不必像在用樸素貝葉斯那樣擔(dān)心你的特征是否相關(guān)。與決策樹(shù)與SVM機(jī)相比,你還會(huì)得到一個(gè)不錯(cuò)的概率解釋,你甚至可以輕松地 利用新數(shù)據(jù)來(lái)更新模型(使用在線(xiàn)梯度下降算法,online gradient descent)。如果你需要一個(gè)概率架構(gòu)(比如,簡(jiǎn)單地調(diào)節(jié)分類(lèi)閾值,指明不確定性,或者是要獲得置信區(qū)間),或者你希望以后將更多的訓(xùn)練數(shù)據(jù)快速整合到模型中去,那么使用它吧。
實(shí)現(xiàn)簡(jiǎn)單,廣泛的應(yīng)用于工業(yè)問(wèn)題上;
分類(lèi)時(shí)計(jì)算量非常小,速度很快,存儲(chǔ)資源低;
便利的觀測(cè)樣本概率分?jǐn)?shù);
對(duì)邏輯回歸而言,多重共線(xiàn)性并不是問(wèn)題,它可以結(jié)合L2正則化來(lái)解決該問(wèn)題;
當(dāng)特征空間很大時(shí),邏輯回歸的性能不是很好;
容易欠擬合,一般準(zhǔn)確度不太高
不能很好地處理大量多類(lèi)特征或變量;
對(duì)于非線(xiàn)性特征,需要進(jìn)行轉(zhuǎn)換;
線(xiàn)性回歸是用于回歸的,而不像Logistic回歸是用于分類(lèi),其基本思想是用梯度下降法對(duì)最小二乘法形式的誤差函數(shù)進(jìn)行優(yōu)化,當(dāng)然也可以用normal equation直接求得參數(shù)的解,結(jié)果為:
優(yōu)點(diǎn): 實(shí)現(xiàn)簡(jiǎn)單,計(jì)算簡(jiǎn)單;
缺點(diǎn): 不能擬合非線(xiàn)性數(shù)據(jù).
KNN即最近鄰算法,其主要過(guò)程為:
如何選擇一個(gè)最佳的K值,這取決于數(shù)據(jù)。一般情況下,在分類(lèi)時(shí)較大的K值能夠減小噪聲的影響。但會(huì)使類(lèi)別之間的界限變得模糊。一個(gè)較好的K值可通過(guò)各種啟發(fā)式技術(shù)來(lái)獲取,比如,交叉驗(yàn)證。另外噪聲和非相關(guān)性特征向量的存在會(huì)使K近鄰算法的準(zhǔn)確性減小。
KNN算法的優(yōu)點(diǎn)
理論成熟,思想簡(jiǎn)單,既可以用來(lái)做分類(lèi)也可以用來(lái)做回歸;
可用于非線(xiàn)性分類(lèi);
訓(xùn)練時(shí)間復(fù)雜度為O(n);
對(duì)數(shù)據(jù)沒(méi)有假設(shè),準(zhǔn)確度高,對(duì)outlier不敏感;
計(jì)算量大;
樣本不平衡問(wèn)題(即有些類(lèi)別的樣本數(shù)量很多,而其它樣本的數(shù)量很少);
需要大量的內(nèi)存;
易于解釋。它可以毫無(wú)壓力地處理特征間的交互關(guān)系并且是非參數(shù)化的,因此你不必?fù)?dān)心異常值或者數(shù)據(jù)是否線(xiàn)性可分(舉個(gè)例子,決策樹(shù)能輕松處理好類(lèi)別A在某
個(gè)特征維度x的末端,類(lèi)別B在中間,然后類(lèi)別A又出現(xiàn)在特征維度x前端的情況)。它的缺點(diǎn)之一就是不支持在線(xiàn)學(xué)習(xí),于是在新樣本到來(lái)后,決策樹(shù)需要全部重
建。另一個(gè)缺點(diǎn)就是容易出現(xiàn)過(guò)擬合,但這也就是諸如隨機(jī)森林RF(或提升樹(shù)boosted
tree)之類(lèi)的集成方法的切入點(diǎn)。另外,隨機(jī)森林經(jīng)常是很多分類(lèi)問(wèn)題的贏家(通常比支持向量機(jī)好上那么一丁點(diǎn)),它訓(xùn)練快速并且可調(diào),同時(shí)你無(wú)須擔(dān)心要
像支持向量機(jī)那樣調(diào)一大堆參數(shù),所以在以前都一直很受歡迎。
信息熵的計(jì)算公式如下:
現(xiàn)在選中一個(gè)屬性xixi用來(lái)進(jìn)行分枝,此時(shí)分枝規(guī)則是:如果xi=vxi=v的話(huà),將樣本分到樹(shù)的一個(gè)分支;如果不相等則進(jìn)入另一個(gè)分支。很顯然,分支
中的樣本很有可能包括2個(gè)類(lèi)別,分別計(jì)算這2個(gè)分支的熵H1和H2,計(jì)算出分枝后的總信息熵H’ =p1H1+p2?H2,則此時(shí)的信息增益ΔH = H
- H’。以信息增益為原則,把所有的屬性都測(cè)試一邊,選擇一個(gè)使增益最大的屬性作為本次分枝屬性。
計(jì)算簡(jiǎn)單,易于理解,可解釋性強(qiáng);
比較適合處理有缺失屬性的樣本;
能夠處理不相關(guān)的特征;
在相對(duì)短的時(shí)間內(nèi)能夠?qū)Υ笮蛿?shù)據(jù)源做出可行且效果良好的結(jié)果。
容易發(fā)生過(guò)擬合(隨機(jī)森林可以很大程度上減少過(guò)擬合);
忽略了數(shù)據(jù)之間的相關(guān)性;
對(duì)于那些各類(lèi)別樣本數(shù)量不一致的數(shù)據(jù),在決策樹(shù)當(dāng)中,信息增益的結(jié)果偏向于那些具有更多數(shù)值的特征(只要是使用了信息增益,都有這個(gè)缺點(diǎn),如RF)。
Adaboost是一種加和模型,每個(gè)模型都是基于上一次模型的錯(cuò)誤率來(lái)建立的,過(guò)分關(guān)注分錯(cuò)的樣本,而對(duì)正確分類(lèi)的樣本減少關(guān)注度,逐次迭代之后,可以得到一個(gè)相對(duì)較好的模型。是一種典型的boosting算法。下面是總結(jié)下它的優(yōu)缺點(diǎn)。
adaboost是一種有很高精度的分類(lèi)器。
可以使用各種方法構(gòu)建子分類(lèi)器,Adaboost算法提供的是框架。
當(dāng)使用簡(jiǎn)單分類(lèi)器時(shí),計(jì)算出的結(jié)果是可以理解的,并且弱分類(lèi)器的構(gòu)造極其簡(jiǎn)單。
簡(jiǎn)單,不用做特征篩選。
不容易發(fā)生overfitting。
關(guān)于隨機(jī)森林和GBDT等組合算法,參考這篇文章:機(jī)器學(xué)習(xí)-組合算法總結(jié)
6.SVM支持向量機(jī)
優(yōu)點(diǎn)
可以解決高維問(wèn)題,即大型特征空間;
能夠處理非線(xiàn)性特征的相互作用;
無(wú)需依賴(lài)整個(gè)數(shù)據(jù);
可以提高泛化能力;
當(dāng)觀測(cè)樣本很多時(shí),效率并不是很高;
對(duì)非線(xiàn)性問(wèn)題沒(méi)有通用解決方案,有時(shí)候很難找到一個(gè)合適的核函數(shù);
對(duì)缺失數(shù)據(jù)敏感;
第一,如果樣本數(shù)量小于特征數(shù),那么就沒(méi)必要選擇非線(xiàn)性核,簡(jiǎn)單的使用線(xiàn)性核就可以了;
第二,如果樣本數(shù)量大于特征數(shù)目,這時(shí)可以使用非線(xiàn)性核,將樣本映射到更高維度,一般可以得到更好的結(jié)果;
第三,如果樣本數(shù)目和特征數(shù)目相等,該情況可以使用非線(xiàn)性核,原理和第二種一樣。
7. 人工神經(jīng)網(wǎng)絡(luò)的優(yōu)缺點(diǎn)
分類(lèi)的準(zhǔn)確度高;
并行分布處理能力強(qiáng),分布存儲(chǔ)及學(xué)習(xí)能力強(qiáng),
對(duì)噪聲神經(jīng)有較強(qiáng)的魯棒性和容錯(cuò)能力,能充分逼近復(fù)雜的非線(xiàn)性關(guān)系;
具備聯(lián)想記憶的功能。
神經(jīng)網(wǎng)絡(luò)需要大量的參數(shù),如網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、權(quán)值和閾值的初始值;
不能觀察之間的學(xué)習(xí)過(guò)程,輸出結(jié)果難以解釋,會(huì)影響到結(jié)果的可信度和可接受程度;
學(xué)習(xí)時(shí)間過(guò)長(zhǎng),甚至可能達(dá)不到學(xué)習(xí)的目的。
之前寫(xiě)過(guò)一篇關(guān)于K-Means聚類(lèi)的文章,博文鏈接:機(jī)器學(xué)習(xí)算法-K-means聚類(lèi)。關(guān)于K-Means的推導(dǎo),里面有著很強(qiáng)大的EM思想。
算法簡(jiǎn)單,容易實(shí)現(xiàn) ;
對(duì)處理大數(shù)據(jù)集,該算法是相對(duì)可伸縮的和高效率的,因?yàn)樗膹?fù)雜度大約是O(nkt),其中n是所有對(duì)象的數(shù)目,k是簇的數(shù)目,t是迭代的次數(shù)。通常k<
算法嘗試找出使平方誤差函數(shù)值最小的k個(gè)劃分。當(dāng)簇是密集的、球狀或團(tuán)狀的,且簇與簇之間區(qū)別明顯時(shí),聚類(lèi)效果較好。
對(duì)數(shù)據(jù)類(lèi)型要求較高,適合數(shù)值型數(shù)據(jù);
可能收斂到局部最小值,在大規(guī)模數(shù)據(jù)上收斂較慢
K值比較難以選取;
對(duì)初值的簇心值敏感,對(duì)于不同的初始值,可能會(huì)導(dǎo)致不同的聚類(lèi)結(jié)果;
不適合于發(fā)現(xiàn)非凸面形狀的簇,或者大小差別很大的簇。
對(duì)于”噪聲”和孤立點(diǎn)數(shù)據(jù)敏感,少量的該類(lèi)數(shù)據(jù)能夠?qū)ζ骄诞a(chǎn)生極大影響。
之前翻譯過(guò)一些國(guó)外的文章,有一篇文章中給出了一個(gè)簡(jiǎn)單的算法選擇技巧:
2. 然后試試決策樹(shù)(隨機(jī)森林)看看是否可以大幅度提升你的模型性能。即便最后你并沒(méi)有把它當(dāng)做為最終模型,你也可以使用隨機(jī)森林來(lái)移除噪聲變量,做特征選擇;
通常情況下:【GBDT>=SVM>=RF>=Adaboost>=Other…】,現(xiàn)在深度學(xué)習(xí)很熱門(mén),很多領(lǐng)域都用到,它是以神經(jīng)網(wǎng)絡(luò)為基礎(chǔ)的,目前我自己也在學(xué)習(xí),只是理論知識(shí)不是很厚實(shí),理解的不夠深,這里就不做介紹了。
算法固然重要,但好的數(shù)據(jù)卻要優(yōu)于好的算法,設(shè)計(jì)優(yōu)良特征是大有裨益的。假如你有一個(gè)超大數(shù)據(jù)集,那么無(wú)論你使用哪種算法可能對(duì)分類(lèi)性能都沒(méi)太大影響(此時(shí)就可以根據(jù)速度和易用性來(lái)進(jìn)行抉擇)。
總結(jié)
以上是生活随笔為你收集整理的etc的常见算法_(转)8种常见机器学习算法比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 主升浪什么意思
- 下一篇: win命令安装 安装cmake_win1