[ML] Decision Tree & Ensembling Metholds

熱身:分類問題若干策略


SVM, LR, Decision Tree的比較

一樣是分類:SVM、LR、決策樹,三者之間有什麼優劣勢呢?html

答:Are decision tree algorithms linear or nonlinear: nonlinear! 更接近 "神經網絡"。算法

 

1、與"判別式分類"的比較

Ref:邏輯迴歸,決策樹,支持向量機 選擇方案網絡

邏輯迴歸 LR

LR的優點:app

  1. 對觀測樣本的機率值輸出
  2. 實現簡單高效
  3. 多重共線性的問題能夠經過L2正則化來應對
  4. 大量的工業界解決方案
  5. 支持online learning(我的補充

LR的劣勢:框架

  1. 特徵空間太大時表現不太好
  2. 對於大量的分類變量無能爲力
  3. 對於非線性特徵須要作特徵變換
  4. 依賴全部的樣本數據

 

支持向量機器 SVM

SVM的優勢:dom

  1. 可以處理大型特徵空間
  2. 可以處理非線性特徵之間的相互做用
  3. 無需依賴整個數據 

SVM的缺點:機器學習

  1. 當觀測樣本不少時,效率並非很高
  2. 有時候很難找到一個合適的核函數

 

決策樹

決策樹的優勢:函數

  1. 直觀的決策規則
  2. 能夠處理非線性特徵
  3. 考慮了變量之間的相互做用 

決策樹的缺點: post

  1. 訓練集上的效果高度優於測試集,即過擬合[隨機森林克服了此缺點]
  2. 沒有將排名分數做爲直接結果

 

2、結論

我總結出了一個工做流程來讓你們參考如何決定使用哪一個模型: 學習

1. 使用LR試一把總歸不會錯的,至少是個baseline 
2. 看看決策樹相關模型例如隨機森林,GBDT有沒有帶來顯著的效果提高,即便最終沒有用這個模型,也能夠用隨機森林的結果來去除噪聲特徵 
3. 若是你的特徵空間和觀測樣本都很大,有足夠的計算資源和時間,試試SVM吧,

 

 

 

決策樹算法


Ref: 算法雜貨鋪——分類算法之決策樹(Decision tree)

1、構造決策樹

屬性選擇度量算法有不少,通常使用自頂向下遞歸分治法,並採用不回溯的貪心策略。這裏介紹ID3C4.5兩種經常使用算法。

使用屬性選擇度量來選擇將元組最好地劃分紅不一樣的類的屬性。所謂決策樹的構造就是進行屬性選擇度量肯定各個特徵屬性之間的拓撲結構。

 

2、模型參數

官方文檔:https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html

也可用於 」迴歸問題「:迴歸樹,模型樹。

 

 

 

決策「森林」


Ensemble method(集成方法),參考博文:機器學習--集成學習(Ensemble Learning)

主流的兩種方式

1、Bootstrap Aggregating (縮寫:Bagging)

Bootstrap 樣本集,「有放回去」 的方式。 舉個栗子:構造 Random Forest(隨機森林) 

(1) 得到 Bootstrap 作爲一個 dataset

(2) 隨機選擇d個特徵

開始訓練一顆樹。 

 

2、Boosting(弱弱變強)

boost算法是基於PAC學習理論(probably approximately correct)而創建的一套集成學習算法(ensemble learning)。

其根本思想在於經過多個簡單的弱分類器,構建出準確率很高的強分類器,PAC學習理論證明了這一方法的可行性。

 

 

(1)在每一輪如何改變訓練數據的權值或機率分佈?

經過提升那些在前一輪被弱分類器分錯樣例的權值,減少前一輪分對樣例的權值,來使得分類器對誤分的數據有較好的效果。

【劃分的很差就多重視一點】

 

(2)經過什麼方式來組合弱分類器?

經過加法模型將弱分類器進行 "線性組合",好比以下三種方式:

* AdaBoost(Adaptive boosting)算法:剛開始訓練時對每個訓練例賦相等的權重,而後用該算法對訓練集訓練t輪,每次訓練後,對訓練失敗的訓練例賦以較大的權重,也就是讓學習算法在每次學習之後更注意學錯的樣本,從而獲得多個預測函數。

經過擬合殘差的方式逐步減少殘差,將每一步生成的模型疊加獲得最終模型。

# AdaBoost Algorithm
from sklearn.ensemble import AdaBoostClassifier
clf = AdaBoostClassifier()
...
clf.fit(x_train,y_train)
clf.predict(x_test)

 

* GBDT(Gradient Boost Decision Tree),每一次的計算是爲了減小上一次的殘差,GBDT在殘差減小(負梯度)的方向上創建一個新的模型。

# Gradient Boosting 
from sklearn.ensemble import GradientBoostingClassifier
clf = GradientBoostingClassifier()
# n_estimators = 100 (default)
# loss function = deviance(default) used in Logistic Regression
clf.fit(x_train,y_train)
clf.predict(x_test)

 

* XGBoost (Extreme Gradient Boosting),掀起了一場數據科學競賽的風暴。

# XGBoost 
from xgboost import XGBClassifier
clf = XGBClassifier()
# n_estimators = 100 (default)
# max_depth = 3 (default)
clf.fit(x_train,y_train)
clf.predict(x_test)

 

 

二者的綜合對比

1、Bagging,Boosting 兩者之間的區別

1)樣本選擇上

  Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的。

  Boosting:每一輪的訓練集不變,只是訓練集中每一個樣例在分類器中的權重發生變化。而權值是根據上一輪的分類結果進行調整。

2)樣例權重

  Bagging:使用均勻取樣,每一個樣例的權重相等

  Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大。

3)預測函數

  Bagging:全部預測函數的權重相等。

  Boosting:每一個弱分類器都有相應的權重,對於分類偏差小的分類器會有更大的權重。

4)並行計算

  Bagging:各個預測函數能夠並行生成

  Boosting:各個預測函數只能順序生成,由於後一個模型參數須要前一輪模型的結果。 

 

2、決策樹與算法框架進行結合

1)Bagging + 決策樹 = 隨機森林

2)AdaBoost + 決策樹 = 提高樹 Boosting Tree

3)Gradient Boosting + 決策樹 = GBDT

  

   

第三種融合策略

1、Stacking(有層次的融合模型)

Ref: 數據挖掘競賽利器-Stacking和Blending方式

用不一樣特徵訓練出來的三個GBDT模型進行融合時,咱們會將三個GBDT做爲基層模型,在其上在訓練一個次學習器(一般爲線性模型LR)【有點像mlp】

 

  /* continue ... */

相關文章
相關標籤/搜索