1. 程式人生 > >機器學習中常用演算法總結

機器學習中常用演算法總結

參考:http://www.shuju.net/article/MDAwMDAyM4DM0.html

在垃圾郵件分類器專案中,隨機森林被用作最終的分類器模型。面試官可能會就此提出以下問題:為什麼選擇隨機森林而非其他模型,比如樸素貝葉斯或者支援向量機。一般來說,面試者可以從數學理論和工程實現兩個方面進行比較回答。從理論上講,資料表現出來的特徵,以及模型所基於的假設都是很好的突破口;從工程實現上講,實現的難易程度,是否易於scale都是可以考慮的點。

邏輯迴歸

優點:計算代價不高,易於理解和實現。 
缺點:容易欠擬合,分類精度可能不高。
關鍵詞:Sigmoid函式、Softmax解決多分類
適用資料型別:數值型和標稱型資料。
其它:邏輯迴歸函式雖然是一個非線性的函式,但其實其去除Sigmoid對映函式之後,其他步驟都和線性迴歸一致。

支援向量機

優點:適合小數量樣本資料,可以解決高維問題,理論基礎比較完善,對於學數學的來說它的理論很美;可以提高泛化能力;
缺點:資料量大時,記憶體資源消耗大(儲存訓練樣本和核矩陣),時間複雜度高,這時候LR等演算法就比SVM要好;對非線性問題沒有通用解決方案,有時候很難找到一個合適的核函式
對於核函式的運用對SVM來說確實是一個亮點,但是核函式不是SVM專屬的,其他演算法一旦涉及到內積運算,就可以使用核函式。它的優化方向的話就是各種不同的場景了,比如擴充套件到多分類,類別標籤不平衡等都可以對SVM做些改變來適應場景
關鍵詞:最優超平面 最大間隔 拉格朗日乘子法 對偶問題 SMO求解 核函式 hinge損失 鬆弛變數 懲罰因子 多分類
適用資料型別:數值型和標稱型資料。
引數:選擇核函式,如徑向基函式(低維到高維)、線性核函式,以及核函式的引數; 懲罰因子
其它:SVM也並不是在任何場景都比其他演算法好,SVM在郵件分類上不如邏輯迴歸、KNN、bayes的效果好,是基於距離的模型,需要歸一化

決策樹

優點:計算複雜度不高,輸出結果易於理解,對中間值的缺失不敏感,可以處理不相關特徵資料。
缺點:過擬合,可限制樹深度及葉子節點個數
關鍵詞:ID3(資訊增益) C4.5(資訊增益比) CART(基尼係數)

資料要求:標稱型資料,因此數值型資料必須離散化

隨機森林

優點:

1. 對很多資料集表現很好,精確度比較高

2. 不容易過擬合

3. 可以得到變數的重要性排序

4. 既能處理離散型資料,也能處理連續型資料,且不需要進行歸一化處理

5. 能夠很好的處理缺失資料

6 容易並行化

Adaboost

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

adaboost是一種有很高精度的分類器。
可以使用各種方法構建子分類器,Adaboost演算法提供的是框架。
當使用簡單分類器時,計算出的結果是可以理解的,並且弱分類器的構造極其簡單。
簡單,不用做特徵篩選。
不容易發生overfitting。
缺點:對outlier比較敏感

GBDT

優點:

1. 精度高

2. 適用於線性和非線性資料

3. 能處理多特徵型別,共線性特徵

4. 可以靈活處理各種型別的資料,包括連續值和離散值。

5. 在相對少的調參時間情況下,預測的準備率也可以比較高。這個是相對SVM來說的。

5. 能處理缺失值。使用一些健壯的損失函式,對異常值的魯棒性非常強。比如 Huber損失函式和Quantile損失函式。

缺點:

1. 難並行

2. 多類別分類,時空複雜度高

正則化防止過擬合:

1. 第一種是和Adaboost類似的正則化項,即步長(learning rate)

2. 第二種正則化的方式是通過子取樣比例(subsample)。取值為(0,1]。注意這裡的子取樣和隨機森林不一樣,隨機森林使用的是放回抽樣,而這裡是不放回抽樣。如果取值為1,則全部樣本都使用,等於沒有使用子取樣。如果取值小於1,則只有一部分樣本會去做GBDT的決策樹擬合。選擇小於1的比例可以減少方差,即防止過擬合,但是會增加樣本擬合的偏差,因此取值不能太低。推薦在[0.5, 0.8]之間。

3. 第三種是對於弱學習器即CART迴歸樹進行正則化剪枝。

常用損失函式:

1. 分類演算法,其損失函式一般有和兩種:

a) 對數損失函式,與Adaboost類似

b) 指數損失函式,分為二元分類和多元分類兩種

2. 迴歸演算法,常用損失函式有如下4種:
a) 均方差
b) 絕對損失
c) Huber損失,它是均方差和絕對損失的折衷產物,對於遠離中心的異常點,採用絕對損失,而中心附近的點採用均方差。這個界限一般用分位數點度量。

工程問題及條慘:

1. 不需要對特徵進行歸一化

2. 適合低維稠密資料,不太適合高維稀疏資料跟多分類資料

3. 可計算不同特徵的重要性

4. GBRT的並行實現:訓練過程中前後有依賴關係,難並行,但是訓練迴歸樹可並行。

引數:

重要引數:迭代次數(樹的個數),學習速率(正則引數),樹的深度(葉子結點數)

次重要引數:訓練資料取樣比例,訓練特徵取樣比例

通常取值:

TreeNum = 100~1000

TreeDepth=3~8

Max_leaf_nodes=20左右

learning_rate=0.01~1

SubSample=0.5~1

Max_feature=sqrt(feature_num)

xgboost

這是一個近年來出現在各大比賽的大殺器,奪冠選手很大部分都使用了它。
高準確率高效率高併發,支援自定義損失函式,既可以用來分類又可以用來回歸
可以像隨機森林一樣輸出特徵重要性,因為速度快,適合作為高維特徵選擇的一大利器
在目標函式中加入正則項,控制了模型的複雜程度,可以避免過擬合
支援列抽樣,也就是隨機選擇特徵,增強了模型的穩定性
對缺失值不敏感,可以學習到包含缺失值的特徵的分裂方向
另外一個廣受歡迎的原因是支援並行,速度槓槓的
用的好,你會發現他的全部都是優點

樸素貝葉斯

優點:對小規模的資料表現很好,能個處理多分類任務,適合增量式訓練,尤其是資料量超出記憶體時,我們可以一批批的去增量訓練; 對缺失資料不太敏感,演算法也比較簡單,常用於文字分類。
缺點:樸素貝葉斯模型假設屬性之間相互獨立,實際應用中屬性之間相關性較大時,分類效果不好;需要知道先驗概率,且先驗概率很多時候取決於假設
資料型別:標稱型資料。

樸素:特徵之間相互獨立;每個特徵同等重要。高偏差低方差模型

注意事項:Laplace校準

K-近鄰演算法(KNN)

優點:精度高、對異常值不敏感、無資料輸入假定。
缺點:計算複雜度高,空間複雜度,資料不平衡問題。KD-Tree
資料型別:數值型和標稱型。

其它:K值如何選擇;資料不平衡時分類傾向更多樣本的類,解決方法是距離加權重

k值的選擇:當k值較小時,預測結果對近鄰的例項點非常敏感,容易發生過擬合;如果k值過大模型會傾向大類,容易欠擬合;通常k是不大於20的整數(參考《機器學習實戰》)

K-Means(K 均值演算法)

優點:容易實現。
缺點:K值不容易確定,對初始值敏感,可能收斂到區域性最小值。KD-Tree
資料型別:數值型資料。
K值的確定:簇類指標(半徑、直徑)出現拐點
克服K-均值演算法收斂於區域性最小值,需確定初始聚類中心:
K-Means++演算法:初始的聚類中心之間的相互距離要儘可能的遠。

二分K-均值演算法:首先將所有點作為一個簇,然後將簇一分為二。之後選擇其中一個簇繼續劃分,選擇哪個一簇進行劃分取決於對其劃分是否可以最大程度降低SSE(Sum of Squared Error,兩個簇的總誤差平方和)的值。

Apriori演算法

優點:容易實現。
缺點:在大型資料集上速度較慢。空間複雜度高,主要是C2候選項;時間複雜度高,需多次掃描資料庫
資料型別:數值型或標稱型資料
原理:如果某個項集時頻繁的,那麼他的所有子集也是頻繁的。
簡述:Apriori演算法是發現頻繁項集的一種方法。Apriori演算法的兩個輸入引數分別是最小支援度和資料集。該演算法首先會生成所有單個item的項集列表。然後掃描列表計算每個item的項集支援度,將低於最小支援度的item排除掉,然後將每個item兩兩組合,然後重新計算整合後的item列表的支援度並且和最小支援度比較。重複這一過程,直至所有項集都被去掉。

FPGrowth演算法

優點:時間複雜度和空間複雜度都要優於Apriori。
缺點:實現比較困難,在某些資料集上效能會下降
原理:標稱型資料
關鍵詞:過濾不頻繁集合,項頭表支援度排序 FP樹 條件模式基 條件樹
簡述:FP-growth也是用於發現頻繁項集的演算法,基本資料結構包含一個一棵FP樹和一個項頭表。構建FP樹時只對資料集掃描兩次,第二次從FP樹中挖掘頻繁項集。

繼續改進方法:包括資料庫劃分,資料取樣

人工神經網路

優點:
分類的準確度高;
並行分佈處理能力強,分佈儲存及學習能力強,
對噪聲神經有較強的魯棒性和容錯能力,能充分逼近複雜的非線性關係;
具備聯想記憶的功能。
缺點:
神經網路需要大量的引數,如網路拓撲結構、權值和閾值的初始值;
不能觀察之間的學習過程,輸出結果難以解釋,會影響到結果的可信度和可接受程度;

學習時間過長,甚至可能達不到學習的目的。