機器學習算法選擇

各類機器學習的應用場景分別是什麼?例如,k近鄰,貝葉斯,決策樹,svm,邏輯斯蒂迴歸和最大熵模型。

k近鄰,貝葉斯,決策樹,svm,邏輯斯蒂迴歸和最大熵模型,隱馬爾科夫,條件隨機場,adaboost,em 這些在通常工做中,分別用到的頻率多大?通常用…
 

關於這個問題我今天正好看到了這個文章。講的正是各個算法的優劣分析,很中肯。html

正好14年的時候有人作過一個實驗[1],比較在不一樣數據集上(121個),不一樣的分類器(179個)的實際效果。react

論文題爲:Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?git

實驗時間有點早,我嘗試着結合我本身的理解、一些最近的實驗,來談一談吧。主要針對分類器(Classifier)。程序員

寫給懶得看的人:github

沒有最好的分類器,只有最合適的分類器。

隨機森林平均來講最強,但也只在9.9%的數據集上拿到了第一,優勢是鮮有短板。面試

SVM的平均水平緊隨其後,在10.7%的數據集上拿到第一。算法

神經網絡(13.2%)和boosting(~9%)表現不錯。網絡

數據維度越高,隨機森林就比AdaBoost強越多,可是總體不及SVM[2]。session

數據量越大,神經網絡就越強。app


近鄰 (Nearest Neighbor)

典型的例子是KNN,它的思路就是——對於待判斷的點,找到離它最近的幾個數據點,根據它們的類型決定待判斷點的類型。

它的特色是徹底跟着數據走,沒有數學模型可言。


適用情景:

須要一個特別容易解釋的模型的時候。

好比須要向用戶解釋緣由的推薦算法。


貝葉斯 (Bayesian)

典型的例子是Naive Bayes,核心思路是根據條件機率計算待判斷點的類型。

是相對容易理解的一個模型,至今依然被垃圾郵件過濾器使用。


適用情景:

須要一個比較容易解釋,並且不一樣維度之間相關性較小的模型的時候。

能夠高效處理高維數據,雖然結果可能不盡如人意。


決策樹 (Decision tree)

決策樹的特色是它老是在沿着特徵作切分。隨着層層遞進,這個劃分會愈來愈細。

雖然生成的樹不容易給用戶看,可是數據分析的時候,經過觀察樹的上層結構,可以對分類器的核心思路有一個直觀的感覺。

舉個簡單的例子,當咱們預測一個孩子的身高的時候,決策樹的第一層多是這個孩子的性別。男生走左邊的樹進行進一步預測,女生則走右邊的樹。這就說明性別對身高有很強的影響。


適用情景:

由於它可以生成清晰的基於特徵(feature)選擇不一樣預測結果的樹狀結構,數據分析師但願更好的理解手上的數據的時候每每可使用決策樹。

同時它也是相對容易被攻擊的分類器[3]。這裏的攻擊是指人爲的改變一些特徵,使得分類器判斷錯誤。常見於垃圾郵件躲避檢測中。由於決策樹最終在底層判斷是基於單個條件的,攻擊者每每只須要改變不多的特徵就能夠逃過監測。

受限於它的簡單性,決策樹更大的用處是做爲一些更有用的算法的基石。


隨機森林 (Random forest)

提到決策樹就不得不提隨機森林。顧名思義,森林就是不少樹。

嚴格來講,隨機森林其實算是一種集成算法。它首先隨機選取不一樣的特徵(feature)和訓練樣本(training sample),生成大量的決策樹,而後綜合這些決策樹的結果來進行最終的分類。

隨機森林在現實分析中被大量使用,它相對於決策樹,在準確性上有了很大的提高,同時必定程度上改善了決策樹容易被攻擊的特色。


適用情景:

數據維度相對低(幾十維),同時對準確性有較高要求時。

由於不須要不少參數調整就能夠達到不錯的效果,基本上不知道用什麼方法的時候均可以先試一下隨機森林。


SVM (Support vector machine)

SVM的核心思想就是找到不一樣類別之間的分界面,使得兩類樣本儘可能落在面的兩邊,並且離分界面儘可能遠。

最先的SVM是平面的,侷限很大。可是利用核函數(kernel function),咱們能夠把平面投射(mapping)成曲面,進而大大提升SVM的適用範圍。

提升以後的SVM一樣被大量使用,在實際分類中展示了很優秀的正確率。


適用情景:

SVM在不少數據集上都有優秀的表現。

相對來講,SVM儘可能保持與樣本間距離的性質致使它抗攻擊的能力更強。

和隨機森林同樣,這也是一個拿到數據就能夠先嚐試一下的算法。


邏輯斯蒂迴歸 (Logistic regression)

邏輯斯蒂迴歸這個名字太詭異了,我就叫它LR吧,反正討論的是分類器,也沒有別的方法叫LR。顧名思義,它實際上是迴歸類方法的一個變體。

迴歸方法的核心就是爲函數找到最合適的參數,使得函數的值和樣本的值最接近。例如線性迴歸(Linear regression)就是對於函數f(x)=ax+b,找到最合適的a,b。

LR擬合的就不是線性函數了,它擬合的是一個機率學中的函數,f(x)的值這時候就反映了樣本屬於這個類的機率。


適用情景:

LR一樣是不少分類算法的基礎組件,它的好處是輸出值天然地落在0到1之間,而且有機率意義。

由於它本質上是一個線性的分類器,因此處理很差特徵之間相關的狀況。

雖然效果通常,卻勝在模型清晰,背後的機率學經得住推敲。它擬合出來的參數就表明了每個特徵(feature)對結果的影響。也是一個理解數據的好工具。


判別分析 (Discriminant analysis)

判別分析主要是統計那邊在用,因此我也不是很熟悉,臨時找統計系的閨蜜補了補課。這裏就現學現賣了。

判別分析的典型例子是線性判別分析(Linear discriminant analysis),簡稱LDA。

(這裏注意不要和隱含狄利克雷分佈(Latent Dirichlet allocation)弄混,雖然都叫LDA但說的不是一件事。)

LDA的核心思想是把高維的樣本投射(project)到低維上,若是要分紅兩類,就投射到一維。要分三類就投射到二維平面上。這樣的投射固然有不少種不一樣的方式,LDA投射的標準就是讓同類的樣本儘可能靠近,而不一樣類的儘可能分開。對於將來要預測的樣本,用一樣的方式投射以後就能夠輕易地分辨類別了。


使用情景:

判別分析適用於高維數據須要降維的狀況,自帶降維功能使得咱們能方便地觀察樣本分佈。它的正確性有數學公式能夠證實,因此一樣是很經得住推敲的方式。

可是它的分類準確率每每不是很高,因此不是統計系的人就把它做爲降維工具用吧。

同時注意它是假定樣本成正態分佈的,因此那種同心圓形的數據就不要嘗試了。


神經網絡 (Neural network)

神經網絡如今是火得不行啊。它的核心思路是利用訓練樣本(training sample)來逐漸地完善參數。仍是舉個例子預測身高的例子,若是輸入的特徵中有一個是性別(1:男;0:女),而輸出的特徵是身高(1:高;0:矮)。那麼當訓練樣本是一個個子高的男生的時候,在神經網絡中,從「男」到「高」的路線就會被強化。同理,若是來了一個個子高的女生,那從「女」到「高」的路線就會被強化。

最終神經網絡的哪些路線比較強,就由咱們的樣本所決定。

神經網絡的優點在於,它能夠有不少不少層。若是輸入輸出是直接鏈接的,那它和LR就沒有什麼區別。可是經過大量中間層的引入,它就可以捕捉不少輸入特徵之間的關係。卷積神經網絡有很經典的不一樣層的可視化展現(visulization),我這裏就不贅述了。

神經網絡的提出其實很早了,可是它的準確率依賴於龐大的訓練集,本來受限於計算機的速度,分類效果一直不如隨機森林和SVM這種經典算法。


使用情景:

數據量龐大,參數之間存在內在聯繫的時候。

固然如今神經網絡不僅是一個分類器,它還能夠用來生成數據,用來作降維,這些就不在這裏討論了。


Rule-based methods

這個我是真不熟,都不知道中文翻譯是什麼。

它裏面典型的算法是C5.0 Rules,一個基於決策樹的變體。由於決策樹畢竟是樹狀結構,理解上仍是有必定難度。因此它把決策樹的結果提取出來,造成一個一個兩三個條件組成的小規則。


使用情景:

它的準確度比決策樹稍低,不多見人用。大概須要提供明確小規則來解釋決定的時候纔會用吧。


提高算法(Boosting)

接下來說的一系列模型,都屬於集成學習算法(Ensemble Learning),基於一個核心理念:三個臭皮匠,頂個諸葛亮。

翻譯過來就是:當咱們把多個較弱的分類器結合起來的時候,它的結果會比一個強的分類器更

典型的例子是AdaBoost。

AdaBoost的實現是一個漸進的過程,從一個最基礎的分類器開始,每次尋找一個最能解決當前錯誤樣本的分類器。用加權取和(weighted sum)的方式把這個新分類器結合進已有的分類器中。

它的好處是自帶了特徵選擇(feature selection),只使用在訓練集中發現有效的特徵(feature)。這樣就下降了分類時須要計算的特徵數量,也在必定程度上解決了高維數據難以理解的問題。

最經典的AdaBoost實現中,它的每個弱分類器其實就是一個決策樹。這就是以前爲何說決策樹是各類算法的基石。


使用情景:

好的Boosting算法,它的準確性不遜於隨機森林。雖然在[1]的實驗中只有一個擠進前十,可是實際使用中它仍是很強的。由於自帶特徵選擇(feature selection)因此對新手很友好,是一個「不知道用什麼就試一下它吧」的算法。


裝袋算法(Bagging)

一樣是弱分類器組合的思路,相對於Boosting,其實Bagging更好理解。它首先隨機地抽取訓練集(training set),以之爲基礎訓練多個弱分類器。而後經過取平均,或者投票(voting)的方式決定最終的分類結果。

由於它隨機選取訓練集的特色,Bagging能夠必定程度上避免過渡擬合(overfit)。

在[1]中,最強的Bagging算法是基於SVM的。若是用定義不那麼嚴格的話,隨機森林也算是Bagging的一種。


使用情景:

相較於經典的必使算法,Bagging使用的人更少一些。一部分的緣由是Bagging的效果和參數的選擇關係比較大,用默認參數每每沒有很好的效果。

雖然調對參數結果會比決策樹和LR好,可是模型也變得複雜了,沒事有特別的緣由就別用它了。


Stacking

這個我是真不知道中文怎麼說了。它所作的是在多個分類器的結果上,再套一個新的分類器。

這個新的分類器就基於弱分類器的分析結果,加上訓練標籤(training label)進行訓練。通常這最後一層用的是LR。

Stacking在[1]裏面的表現很差,多是由於增長的一層分類器引入了更多的參數,也多是由於有過渡擬合(overfit)的現象。


使用情景:

沒事就別用了。

(修訂:

提醒說stacking在數據挖掘競賽的網站kaggle上很火,相信參數調得好的話仍是對結果能有幫助的。

這篇文章很好地介紹了stacking的好處。在kaggle這種一點點提高就意味着名次不一樣的場合下,stacking仍是頗有效的,可是對於通常商用,它所帶來的提高就很難值回額外的複雜度了。)



多專家模型(Mixture of Experts)

最近這個模型還挺流行的,主要是用來合併神經網絡的分類結果。我也不是很熟,對神經網絡感興趣,並且訓練集異質性(heterogeneity)比較強的話能夠研究一下這個。


講到這裏分類器其實基本說完了。講一下問題裏面其餘一些名詞吧。


最大熵模型 (Maximum entropy model)

最大熵模型自己不是分類器,它通常是用來判斷模型預測結果的好壞的。

對於它來講,分類器預測是至關因而:針對樣本,給每一個類一個出現機率。好比說樣本的特徵是:性別男。個人分類器可能就給出了下面這樣一個機率:高(60%),矮(40%)。

而若是這個樣本真的是高的,那咱們就得了一個分數60%。最大熵模型的目標就是讓這些分數的乘積儘可能大。

LR其實就是使用最大熵模型做爲優化目標的一個算法[4]。


EM

就像最大熵模型同樣,EM不是分類器,而是一個思路。不少算法都是基於這個思路實現的。

@劉奕馳 已經講得很清楚了,我就很少說了。



隱馬爾科夫 (Hidden Markov model)

這是一個基於序列的預測方法,核心思想就是經過上一個(或幾個)狀態預測下一個狀態。

之因此叫「隱」馬爾科夫是由於它的設定是狀態自己咱們是看不到的,咱們只能根據狀態生成的結果序列來學習可能的狀態。


適用場景:

能夠用於序列的預測,能夠用來生成序列。


條件隨機場 (Conditional random field)

典型的例子是linear-chain CRF。

具體的使用 @Aron 有講,我就不獻醜了,由於我歷來沒用過這個。


就是這些啦。


相關的文章:

[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]:

 
 
通常來講Machine Learning主要有3種:
  1. Supervised Learning
  2. Semi-supervised Learning
  3. Unsupervised Learning

Supervised Learning適用與已知LABEL的狀況.
Semi-supervised/Unsupervised Learning適用於有Latent Variable的狀況.

題主提到的這些算法雖然常見,可是想真正的搞懂須要深刻了解(Calculus, Linear Algebra, Probabilistic).

好比SVM,爲何叫Support Vector Machine, 爲何SVM有Sparsity的特性, L1/L2 Regularizar起到了什麼做用, 等等...
單單一個SVM就有太多的內容在裏面了.
-----------------------------------------------------------------------------------------------
接下來回答問題:

k近鄰,貝葉斯,決策樹,svm,邏輯斯蒂迴歸和最大熵模型,隱馬爾科夫,條件隨機場,adaboost,em

首先:
Maximum Entropy和EM是理念.
Maximum Entropy的背後是信息論(Information Theory)和機率模型.
EM Model事實上對全部含有Latent Variable的模型均可以用.

kNN能夠用於圖像壓縮.
可是,如何選取K, Similarity用什麼, 都不是隨便說應用就應用的...

Naive Bayes: 知名的 背後就有用,簡單粗暴, 強大有效...
可是, NB算法如何Smooth,如何應對Online Setting,也不是那麼簡單...

SVM/Logistic Regression 均可以用於各類分類.
可是Hinge Loss和Sigmoid Function有什麼區別, 何時用哪一個?

HMM/CRF NLP經常使用

Ada-boost 能夠參考Netflix Prize,貌似大獎用了這個...具體不清楚
可是, Weak Learner是什麼, Why boost works?

-----------------------------------------------------------------------------------------------
總結:
前幾天Yann Lecun來咱們學校作了演講, 而後咱們的老師回頭總結,我以爲頗有道理:
就是如今Deep Learning處於一個Scaling就是Accuracy的階段,不少背後的緣由咱們其實都沒有搞清楚. 例如, Deep Learning裏用Max作Feature selection效果很好,可是Yann Lecun也只能猜想緣由.
因此真正的應用,取決於你動手去作, 去嘗試.


最後:
推薦Andrew的公開課, 你值得擁有.
 
 
先上一張圖吧,有須要再詳細寫
 
 
  1. crf 分詞、語法依存分析、命名實體識別,可是如今正在愈來愈多的應用場景裏被RNN已經它的變種們所替代~ LSTM+CRF的解決方案取得了state of art的效果~
  2. lr ctr 預估,商品推薦轉換爲點擊率預估也能夠用該模型。以前天貓大數據比賽不少同窗都是用它作的session first。能夠着重瞭解推導,正則化及並行。但如今愈來愈多的依賴於深度學習,包括DNN, DRL.
  3. svm 能夠作文本分類,人臉識別等,瞭解下原始問題如何轉換爲對偶問題,而後使用smo或者其餘問題求解,還有了解下核函數~
  4. adaboost 自己是exp loss在boosting方法下的Model.
  5. EM 是一種優化算法,本質我的認爲有點相似於離散空間的梯度上升算法,通常是結合具體的算法來用,好比混合高斯模型,最大熵,無監督HMM等,但比較經典的我的感受仍是pLSA,其實k-means背後也有em的思想,瞭解em再看k-means就有感受了。
  6. 決策樹能夠認爲是將空間進行劃分,ID3和C4.5算是比較經典的決策樹算法,能夠用來分類,也能夠用來回歸,但業界不多直接使用一棵樹,通常使用多棵樹,組成committee,較爲經典有GBDT 和RF,二者都是ensemble learning的典範,只不過前者使用boosting下降bias,後者使用bagging下降variance從而提高模型的performance。在ESL中有個對比,使樹形模型幾乎完爆其餘算法,泛化能力和學習能力都很牛逼。業界的話通常用來作搜索排序和相關性。
  7. HMM,在基礎的一階馬兒科夫的基礎之上,加入隱含狀態,有二者假設,解決三種問題,通常時間序列預測均可以用該模型,固然了,NLP中的分詞,語音識別等效果也還不錯。

 

先寫到這,求大神來噴~

 
 
分別用到的頻率多大?

It depends. 看你須要處理的問題是什麼。不一樣數據規模、不一樣特徵都會影響算法的選擇。

通常用途是什麼?

這個問題太大了,簡單來講,
KNN、樸素貝葉斯、決策樹、SVM、logistic迴歸、adaboost用來分類。
EM算法用於尋找隱藏參數的最大似然估計。該算法首先在E step中計算隱藏參數的似然估計,而後再M step中進行最大化,而後進行EM step的迭代直至收斂。應用場景之一是聚類問題,但EM算法自己並非一個聚類算法。舉個例子,GMM(高斯混合模型)和Kmeans在聚類時都使用了EM算法。
最大熵模型是一個機率模型,決策樹的數學基礎就是它。
HMM也是一個統計模型,咱們不能用它來作什麼,可是能夠利用這個模型對現實生活中的問題建模。

須要注意什麼?
實踐出真知。
 
 
謝霄哥邀請
這個問題確實頗有意思,做爲新入門的小白 只能提供一點點粗略的認識。
----------------------------------------------------------------------------------------------------------

K近鄰:算法採用測量不一樣特徵值之間的距離的方法進行分類。

優勢:

1.簡單好用,容易理解,精度高,理論成熟,既能夠用來作分類也能夠用來作迴歸;

2.可用於數值型數據和離散型數據;

3.訓練時間複雜度爲O(n);無數據輸入假定;

4.對異常值不敏感

缺點:

1.計算複雜性高;空間複雜性高;

2.樣本不平衡問題(即有些類別的樣本數量不少,而其它樣本的數量不多);

3.通常數值很大的時候不用這個,計算量太大。可是單個樣本又不能太少 不然容易發生誤分。

4.最大的缺點是沒法給出數據的內在含義。


樸素貝葉斯

優勢:

1.生成式模型,經過計算機率來進行分類,能夠用來處理多分類問題,

2.對小規模的數據表現很好,適合多分類任務,適合增量式訓練,算法也比較簡單。

缺點:

1.對輸入數據的表達形式很敏感,

2.因爲樸素貝葉斯的「樸素」特色,因此會帶來一些準確率上的損失。

3.須要計算先驗機率,分類決策存在錯誤率。


決策樹

優勢:

1.概念簡單,計算複雜度不高,可解釋性強,輸出結果易於理解;

2.數據的準備工做簡單, 可以同時處理數據型和常規型屬性,其餘的技術每每要求數據屬性的單一。

3.對中間值得確實不敏感,比較適合處理有缺失屬性值的樣本,可以處理不相關的特徵;

4.應用範圍廣,能夠對不少屬性的數據集構造決策樹,可擴展性強。決策樹能夠用於不熟悉的數據集合,並從中提取出一些列規則 這一點強於KNN。

缺點:

1.容易出現過擬合;

2.對於那些各種別樣本數量不一致的數據,在決策樹當中,信息增益的結果偏向於那些具備更多數值的特徵。

3. 信息缺失時處理起來比較困難。 忽略數據集中屬性之間的相關性。


Svm

優勢:

1.可用於線性/非線性分類,也能夠用於迴歸,泛化錯誤率低,計算開銷不大,結果容易解釋;

2.能夠解決小樣本狀況下的機器學習問題,能夠解決高維問題 能夠避免神經網絡結構選擇和局部極小點問題。

3.SVM是最好的現成的分類器,現成是指不加修改可直接使用。而且可以獲得較低的錯誤率,SVM能夠對訓練集以外的數據點作很好的分類決策。

缺點:對參數調節和和函數的選擇敏感,原始分類器不加修改僅適用於處理二分類問題。


Logistic迴歸:根據現有數據對分類邊界線創建迴歸公式,依次進行分類。

優勢:實現簡單,易於理解和實現;計算代價不高,速度很快,存儲資源低;

缺點:容易欠擬合,分類精度可能不高


EM 指望最大化算法-上帝算法

只要有一些訓練數據,再定義一個最大化函數,採用EM算法,利用計算機通過若干次迭代,就能夠獲得所需的模型。EM算法是自收斂的分類算法,既不須要事先設定類別也不須要數據見的兩兩比較合併等操做。缺點是當所要優化的函數不是凸函數時,EM算法容易給出局部最佳解,而不是最優解。


參考文獻:

機器學習--判別式模型與生成式模型

數據挖掘十大算法----EM算法(最大指望算法)

各類分類算法的優缺點

機器學習&數據挖掘筆記_16(常見面試之機器學習算法思想簡單梳理)

吳軍.數學之美[M].北京:人民郵電出版社,2014.

Peter Harrington,李銳,李鵬,曲亞東,王斌.機器學習實戰[M].北京:人民郵電出版社2013.

李航.統計學習方法[M].北京:清華大學出版社 2012.

杉山將,許永偉.圖解機器學習[M].北京:人民郵電出版社2015.

斯坦福大學公開課 :機器學習課程

 
 

說一些和題目裏面的模型不太有關係的話,介紹一個 KL 散度的運用小場景:

寫過一篇關於 KL 散度的理論+運用的文章:KL 散度(從動力系統到推薦系統)

在信息論和動力系統裏面,Kullback-Leibler 散度(簡稱 KL 散度,KL divergence)是兩個機率分佈 P 和 Q 的一個非對稱的度量公式。這個概念是由 Solomon Kullback 和 Richard Leibler 在 1951 年引入的。從機率分佈 Q 到機率分佈 P 的 KL 散度用 D_{KL}(P||Q) 來表示。儘管從直覺上看 KL 散度是一個度量或者是一個距離,可是它卻不知足度量或者距離的定義。例如,從 Q 到 P 的 KL 散度就不必定等於從 P 到 Q 的 KL 散度。本文即將介紹如何將動力系統的概念運用到實際推薦系統的工做中,從而達到更佳的推薦效果。

詳細請見:KL 散度(從動力系統到推薦系統)
 
 
現代玄學,不少須要依靠經驗
 
具體問題具體分析。。。。。。
 
 

算法是解決方法的數學抽象,一個算法誕生於某個應用場景下,但也能夠用在其餘應用場景。按場景來分不太合理。


好比pagerank是用來作網頁排序的,有人把它用在文本處理上,發現效果奇好,因而發明了textrank。再好比word2vec是天然語言處理的方法,但有人用它來處理交互數據給微博用戶作推薦。
 
 
隨便強答一發吧。說幾個本身用過的。lr萬金油中的萬金油,解釋性很強。(每一個特徵能夠經過權重來分析重要性,這就是所謂的可解釋性)。應用場合不少,例如CTR預估,由於在這個場合下特徵緯度很高而且稀疏。很適合用lr。當特徵維度不高,並且不會稀疏(通常是沒onehot),也就是比較稠密的時候用gbdt或者xgboost比較合適。
相關文章
相關標籤/搜索