機器學習中常用演算法總結
參考: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樹中挖掘頻繁項集。
繼續改進方法:包括資料庫劃分,資料取樣
人工神經網路
優點:分類的準確度高;
並行分佈處理能力強,分佈儲存及學習能力強,
對噪聲神經有較強的魯棒性和容錯能力,能充分逼近複雜的非線性關係;
具備聯想記憶的功能。
缺點:
神經網路需要大量的引數,如網路拓撲結構、權值和閾值的初始值;
不能觀察之間的學習過程,輸出結果難以解釋,會影響到結果的可信度和可接受程度;
學習時間過長,甚至可能達不到學習的目的。