天天看點

機器學習算法優缺點

偏差&方差

在統計學中,一個模型好壞,是根據偏差和方差來衡量的,是以我們先來普及一下偏差和方差:

偏差:描述的是預測值(估計值)的期望E’與真實值Y之間的差距。偏差越大,越偏離真實資料。

Bias[f(x)]=E[f(x)]f(x)

方差:描述的是預測值P的變化範圍,離散程度,是預測值的方差,也就是離其期望值E的距離。方差越大,資料的分布越分散。

Var[f(x)]=E[(f(x)E[f(x)])2]

模型的真實誤差是兩者之和。

E[(yf(x))2]=Bias[f(x)]2+Var[f(x)]+σ2

如果是小訓練集,高偏差/低方差的分類器(例如,樸素貝葉斯NB)要比低偏差/高方差大分類的優勢大(例如,KNN),因為後者會過拟合。但是,随着你訓練集的增長,模型對于原資料的預測能力就越好,偏差就會降低,此時低偏差/高方差分類器就會漸漸的表現其優勢(因為它們有較低的漸近誤差),此時高偏差分類器此時已經不足以提供準确的模型了。

當然,你也可以認為這是生成模型(NB)與判别模型(KNN)的一個差別。

為什麼說樸素貝葉斯是高偏差低方差

以下内容引自知乎:

首先,假設你知道訓練集和測試集的關系。簡單來講是我們要在訓練集上學習一個模型,然後拿到測試集去用,效果好不好要根據測試集的錯誤率來衡量。但很多時候,我們隻能假設測試集和訓練集的是符合同一個資料分布的,但卻拿不到真正的測試資料。這時候怎麼在隻看到訓練錯誤率的情況下,去衡量測試錯誤率呢?

由于訓練樣本很少(至少不足夠多),是以通過訓練集得到的模型,總不是真正正确的。(就算在訓練集上正确率100%,也不能說明它刻畫了真實的資料分布,要知道刻畫真實的資料分布才是我們的目的,而不是隻刻畫訓練集的有限的資料點)。而且,實際中,訓練樣本往往還有一定的噪音誤差,是以如果太追求在訓練集上的完美而采用一個很複雜的模型,會使得模型把訓練集裡面的誤差都當成了真實的資料分布特征,進而得到錯誤的資料分布估計。這樣的話,到了真正的測試集上就錯的一塌糊塗了(這種現象叫過拟合)。但是也不能用太簡單的模型,否則在資料分布比較複雜的時候,模型就不足以刻畫資料分布了(展現為連在訓練集上的錯誤率都很高,這種現象較欠拟合)。過拟合表明采用的模型比真實的資料分布更複雜,而欠拟合表示采用的模型比真實的資料分布要簡單。

在統計學習架構下,大家刻畫模型複雜度的時候,有這麼個觀點,認為Error = Bias + Variance。這裡的Error大概可以了解為模型的預測錯誤率,是有兩部分組成的,一部分是由于模型太簡單而帶來的估計不準确的部分(Bias),另一部分是由于模型太複雜而帶來的更大的變化空間和不确定性(Variance)。

是以,這樣就容易分析樸素貝葉斯了。它簡單的假設了各個資料之間是無關的,是一個被嚴重簡化了的模型。是以,對于這樣一個簡單模型,大部分場合都會Bias部分大于Variance部分,也就是說高偏差而低方差。

在實際中,為了讓Error盡量小,我們在選擇模型的時候需要平衡Bias和Variance所占的比例,也就是平衡over-fitting和under-fitting。

機器學習算法優缺點

當模型複雜度上升的時候,偏差會逐漸變小,而方差會逐漸變大。

常見算法優缺點

1.樸素貝葉斯

樸素貝葉斯屬于生成式模型(關于生成模型和判别式模型,主要還是在于是否是要求聯合分布),非常簡單,你隻是做了一堆計數。如果注有條件獨立性假設(一個比較嚴格的條件),樸素貝葉斯分類器的收斂速度将快于判别模型,如邏輯回歸,是以你隻需要較少的訓練資料即可。即使NB條件獨立假設不成立,NB分類器在實踐中仍然表現的很出色。它的主要缺點是它不能學習特征間的互相作用,用mRMR中R來講,就是特征備援。引用一個比較經典的例子,比如,雖然你喜歡Brad Pitt和Tom Cruise的電影,但是它不能學習出你不喜歡他們在一起演的電影。

優點:

樸素貝葉斯模型發源于古典數學理論,有着堅實的數學基礎,以及穩定的分類效率。

對小規模的資料表現很好,能個處理多分類任務,适合增量式訓練;

對缺失資料不太敏感,算法也比較簡單,常用于文本分類。

缺點:

需要計算先驗機率;

分類決策存在錯誤率;

對輸入資料的表達形式很敏感;

需要條件獨立假設,會犧牲一定準确率,分類性能不一定高

2.Logistic Regression(邏輯回歸)

屬于判别式模型,有很多正則化模型的方法(L0, L1,L2,etc),而且你不必像在用樸素貝葉斯那樣擔心你的特征是否相關。與決策樹與SVM機相比,你還會得到一個不錯的機率解釋,你甚至可以輕松地利用新資料來更新模型(使用線上梯度下降算法,online gradient descent)。如果你需要一個機率架構(比如,簡單地調節分類門檻值,指明不确定性,或者是要獲得置信區間),或者你希望以後将更多的訓練資料快速整合到模型中去,那麼使用它吧。

Sigmoid函數:

g(x)=1/(1+exp(x))

優點:

實作簡單,廣泛的應用于工業問題上;

分類時計算量非常小,速度很快,存儲資源低;

便利的觀測樣本機率分數;

對邏輯回歸而言,多重共線性并不是問題,它可以結合L2正則化來解決該問題;

缺點:

當特征空間很大時,邏輯回歸的性能不是很好;

容易欠拟合,一般準确度不太高

不能很好地處理大量多類特征或變量;

隻能處理兩分類問題(在此基礎上衍生出來的softmax可以用于多分類),且必須線性可分;

對于非線性特征,需要進行轉換;

3.線性回歸

線性回歸是用于回歸的,而不像Logistic回歸是用于分類,其基本思想是用梯度下降法對最小二乘法形式的誤差函數進行優化,當然也可以用normal equation直接求得參數的解,結果為:

而在LWLR(局部權重線性回歸)中,參數的計算表達式為:

由此可見LWLR與LR不同,LWLR是一個非參數模型,因為每次進行回歸計算都要周遊訓練樣本至少一次。

優點: 實作簡單,計算簡單;

缺點: 不能拟合非線性資料;對複雜資料拟合不好,欠拟合

4.最近鄰算法——KNN

KNN即最近鄰算法,其主要過程為:

計算訓練樣本和測試樣本中每個樣本點的距離(常見的距離度量有歐式距離,馬氏距離等); 2. 對上面所有的距離值進行排序; 3. 選前k個最小距離的樣本; 4. 根據這k個樣本的标簽進行投票,得到最後的分類類别;

如何選擇一個最佳的K值,這取決于資料。一般情況下,在分類時較大的K值能夠減小噪聲的影響。但會使類别之間的界限變得模糊。一個較好的K值可通過各種啟發式技術來擷取,比如,交叉驗證。另外噪聲和非相關性特征向量的存在會使K近鄰算法的準确性減小。

近鄰算法具有較強的一緻性結果。随着資料趨于無限,算法保證錯誤率不會超過貝葉斯算法錯誤率的兩倍。對于一些好的K值,K近鄰保證錯誤率不會超過貝葉斯理論誤差率。

KNN算法的優點

理論成熟,思想簡單,既可以用來做分類也可以用來做回歸;

可用于非線性分類;

訓練時間複雜度為O(n);

對資料沒有假設,準确度高,對outlier不敏感;

缺點

計算量大;

K需預先設定,樣本不平衡問題(即有些類别的樣本數量很多,而其它樣本的數量很少,易偏向大容量資料);

需要大量的記憶體;

常用算法:kd樹:對x的K個特征,挨個做切分,使得每個資料最終都在切分點上(中位數),對輸入的資料搜尋kd樹,

找到K近鄰

5.決策樹

易于解釋。它可以毫無壓力地處理特征間的互動關系并且是非參數化的,是以你不必擔心異常值或者資料是否線性可分(舉個例子,決策樹能輕松處理好類别A在某個特征次元x的末端,類别B在中間,然後類别A又出現在特征次元x前端的情況)。它的缺點之一就是不支援線上學習,于是在新樣本到來後,決策樹需要全部重建。另一個缺點就是容易出現過拟合,但這也就是諸如随機森林RF(或提升樹boosted tree)之類的內建方法的切入點。另外,随機森林經常是很多分類問題的赢家(通常比支援向量機好上那麼一丁點),它訓練快速并且可調,同時你無須擔心要像支援向量機那樣調一大堆參數,是以在以前都一直很受歡迎。

決策樹中很重要的一點就是選擇一個屬性進行分枝,是以要注意一下資訊增益的計算公式,并深入了解它。

資訊熵的計算公式如下:

H=∑i=1np(xi)logp(xi)2

其中的n代表有n個分類類别(比如假設是2類問題,那麼n=2)。分别計算這2類樣本在總樣本中出現的機率p1和p2,這樣就可以計算出未選中屬性分枝前的資訊熵。

現在選中一個屬性xi用來進行分枝,此時分枝規則是:如果xi=v的話,将樣本分到樹的一個分支;如果不相等則進入另一個分支。很顯然,分支中的樣本很有可能包括2個類别,分别計算這2個分支的熵H1和H2,計算出分枝後的總資訊熵H’ =p1 H1+p2 H2,則此時的資訊增益ΔH = H - H’。以資訊增益為原則,把所有的屬性都測試一邊,選擇一個使增益最大的屬性作為本次分枝屬性。

決策樹自身的優點

計算簡單,易于了解,可解釋性強;

比較适合處理有缺失屬性的樣本;

能夠處理不相關的特征;

在相對短的時間内能夠對大型資料源做出可行且效果良好的結果。

缺點

容易發生過拟合(随機森林可以很大程度上減少過拟合),使用剪枝來避免過拟合;

忽略了資料之間的相關性;

對于那些各類别樣本數量不一緻的資料,在決策樹當中,資訊增益的結果偏向于那些具有更多數值的特征(隻要是使用了資訊增益,都有這個缺點,如RF)。

CART分類與回歸樹:

決策樹分類方法,采用基于最小距離的基尼指數估計函數,用來決定由該子資料集生成的決策樹的拓展形。決策樹回歸方法,采用切分點與切分變量來計算的損失來估計函數。如果目标變量是标稱的,稱為分類樹;如果目标變量是連續的,稱為回歸樹。分類樹是使用樹結構算法将資料分成離散類的方法。

優點:非常靈活,可以允許有部分錯分成本,還可指定先驗機率分布,可使用自動的成本複雜性剪枝來得到歸納性更強的樹,産生的分類規則易于了解,準确率較高。

缺點:在構造樹的過程中,需要對資料集進行多次的順序掃描和排序,因而導緻算法的低效。此外,C4.5隻适合于能夠駐留于記憶體的資料集,當訓練集大得無法在記憶體容納時程式無法運作。

5.1 Adaboosting

Adaboost是一種加和模型,每個模型都是基于上一次模型的錯誤率來建立的,過分關注分錯的樣本,而對正确分類的樣本減少關注度,逐次疊代之後,可以得到一個相對較好的模型。是一種典型的boosting算法。下面是總結下它的優缺點。

優點

adaboost是一種有很高精度的分類器。

可以使用各種方法建構子分類器,Adaboost算法提供的是架構。

當使用簡單分類器時,計算出的結果是可以了解的,并且弱分類器的構造極其簡單。

簡單,不用做特征篩選。

不容易發生overfitting。

關于随機森林和GBDT等組合算法,參考這篇文章:機器學習-組合算法總結

缺點:對異常值比較敏感

5.2 xgboost

這是一個近年來出現在各大比賽的大殺器,奪冠選手很大部分都使用了它。

高準确率高效率高并發,支援自定義損失函數,既可以用來分類又可以用來回歸

可以像随機森林一樣輸出特征重要性,因為速度快,适合作為高維特征選擇的一大利器

在目标函數中加入正則項,控制了模型的複雜程度,可以避免過拟合

支援列抽樣,也就是随機選擇特征,增強了模型的穩定性

對缺失值不敏感,可以學習到包含缺失值的特征的分裂方向

另外一個廣受歡迎的原因是支援并行,速度杠杠的

用的好,你會發現他的全部都是優點

6、随機森林:判别模型,多分類與回歸,正則化的極大似然估計,Bagging,Random Future

特點:

準确率可以和Adaboost相媲美,對錯誤和離群點更魯棒。準确率依賴于個體分類器的實力和它們之間的依賴性。理想情況是保持個體分類器的能力而不提高它們的相關性。對每次劃分所考慮的屬性數很敏感。通常選取logn2+1個屬性,其中n是資料集的執行個體數。(一個有趣的觀察是,使用單個随機選擇的屬性可能導緻很好的準确率,常常比使用多個屬性更高。)

優點:不易過拟合,可能比Bagging和Boosting更快。由于在每次劃分時隻考慮很少的屬性,是以它們在大型資料庫上非常有效。有很好的方法來填充缺失值,即便有很大一部分資料缺失,仍能維持很高準确度。給出了變量重要性的内在估計,對于不平衡樣本分類,它可以平衡誤差。可以計算各執行個體的親近度,對于資料挖掘、檢測離群點和資料可視化非常有用。

缺點:在某些噪聲較大的分類和回歸問題上會過拟合。對于有不同級别的屬性的資料,級别劃分較多的屬性會對随機森林産生更大的影響,是以随機森林在這種資料上産生的屬性權值是不可信的。

--------------------- 

作者:我是醬油誰要打我 

來源:CSDN 

原文:https://blog.csdn.net/MG_ApinG/article/details/82459591 

版權聲明:本文為部落客原創文章,轉載請附上博文連結!

7、SVM支援向量機

高準确率,為避免過拟合提供了很好的理論保證,而且就算資料在原特征空間線性不可分,隻要給個合适的核函數,它就能運作得很好。在動辄超高維的文本分類問題中特别受歡迎。可惜記憶體消耗大,難以解釋,運作和調參也有些煩人,而随機森林卻剛好避開了這些缺點,比較實用。

優點

可以解決高維問題,即大型特征空間(将低維空間映射到高維空間,實作線性可分);

能夠處理非線性特征的互相作用,可用于分類與回歸;

無需依賴整個資料;

可以提高泛化能力;

需要對資料提前歸一化,很多人使用的時候忽略了這一點,畢竟是基于距離的模型,是以LR也需要歸一化

缺點

當觀測樣本很多時,效率并不是很高;

一個可行的解決辦法是模仿随機森林,對資料分解,訓練多個模型,然後求平均,時間複雜度降低p倍,分多少份,降多少倍

對非線性問題沒有通用解決方案,有時候很難找到一個合适的核函數;

對缺失資料敏感;

對核函數以及參數敏感;

對于核的選擇也是有技巧的(libsvm中自帶了四種核函數:線性核、多項式核、RBF以及sigmoid核):

第一,如果樣本數量小于特征數,那麼就沒必要選擇非線性核,簡單的使用線性核就可以了;

第二,如果樣本數量大于特征數目,這時可以使用非線性核,将樣本映射到更高次元,一般可以得到更好的結果;

第三,如果樣本數目和特征數目相等,該情況可以使用非線性核,原理和第二種一樣。

對于第一種情況,也可以先對資料進行降維,然後使用非線性核,這也是一種方法。

8、人工神經網絡

人工神經網絡的優點:

分類的準确度高;

并行分布處理能力強,分布存儲及學習能力強,

對噪聲神經有較強的魯棒性和容錯能力,能充分逼近複雜的非線性關系;

具有記憶能力、自學能力,誤差反向傳播,并行性好。

人工神經網絡的缺點:

神經網絡需要大量的參數,如網絡拓撲結構、權值和門檻值的初始值(使用AUTO-Encoder);

不能觀察之間的學習過程,輸出結果難以解釋,會影響到結果的可信度和可接受程度;

學習時間過長,資料不充分時,将無法工作。

9、K-Means聚類

關于K-Means聚類的文章,連結:kmeans算法了解及代碼實作。

優點

算法簡單,容易實作 ;

對處理大資料集,該算法是相對可伸縮的和高效率的,因為它的複雜度大約是O(nkt),其中n是所有對象的數目,k是簇的數目,t是疊代的次數。

缺點: 

需要使用者事先指定類簇個數; 聚類結果對初始類簇中心的選取較為敏感; 容易陷入局部最優; 隻能發現球形類簇;

10、EM:含隐藏變量的機率模型,使用機率模型參數估計

特點:E:給定參數與觀測資料下對未觀測資料的條件機率分布的期望

M:求使條件機率分布期望最大下的參數值

優點:比K-means穩定、準确

缺點:計算複雜且收斂慢,依賴于初始參數假設

繼續閱讀