1. 程式人生 > >統計學習方法 CART Bagging Random Forest Boosting

統計學習方法 CART Bagging Random Forest Boosting

               

本文從統計學角度講解了CART(Classification And Regression Tree), Bagging(bootstrap aggregation), Random Forest Boosting四種分類器的特點與分類方法,參考材料為密歇根大學Ji Zhu的pdf與組會上王博的講解。

  • CART(Classification And Regression Tree
         Breiman, Friedman, Olshen & Stone (1984), Quinlan (1993)         思想:遞迴地將輸入空間分割成矩形         優點:可以進行變數選擇,可以克服missing data,可以處理混合預測
         缺點:不穩定     example:對於下面的資料,希望分割成紅色和綠色兩個類,原本資料生成是這樣的:Red class: x1^2+x2^2>=4.6Green class: otherwise經過不斷分割可以得到最後的分類樹:
  • 那麼怎麼分割才是最好的呢?即怎樣將輸入空間分割成矩形是最佳策略呢?這裡一般採用三中評價標準策略:
分裂時,找到使不純度下降最快的分裂變數和分裂點。
  • 從結果可以看出CART可以通過變數選擇迭代地建立一棵分類樹,使得每次分類平面能最好地將剩餘資料分為兩類。
  • classification tree非常簡單,但是經常會有noisy classifiers. 於是引入ensemble classifiers: bagging, random forest, 和boosting。
一般的, Boosting > Bagging > Classification tree(single tree)
  • Bagging (Breiman1996): 也稱bootstrap aggregation

Bagging的策略:

         - 從樣本集中用Bootstrap取樣選出n個樣本

         - 在所有屬性上,對這n個樣本建立分類器(CART or SVM or ...)

         - 重複以上兩步m次,i.e.build m個分類器(CART or SVM or ...)

         - 將資料放在這m個分類器上跑,最後vote看到底分到哪一類

Fit many large trees to 

bootstrap resampled versions of the training data, and classify by majority vote.

下圖是Bagging的選擇策略,每次從N個數據中取樣n次得到n個數據的一個bag,總共選擇B次得到B個bags,也就是B個bootstrap samples.
  • Random forest(Breiman1999):
隨機森林在bagging基礎上做了修改。

         - 從樣本集中用Bootstrap取樣選出n個樣本,預建立CART

         - 在樹的每個節點上,從所有屬性中隨機選擇k個屬性,選擇出一個最佳分割屬性作為節點

         - 重複以上兩步m次,i.e.build m棵CART

         - 這m個CART形成Random Forest

隨機森林可以既可以處理屬性為離散值的量,比如ID3演算法,也可以處理屬性為連續值的量,比如C4.5演算法。這裡的random就是指1. Bootstrap中的隨機選擇子樣本   2. Random subspace的演算法從屬性集中隨機選擇k個屬性,每個樹節點分裂時,從這隨機的k個屬性,選擇最優的結果證明有時候Random Forest比Bagging還要好。今天微軟的Kinect裡面就採用了Random Forest,相關論文Real-time Human Pose Recognition in Parts from Single Depth Images是CVPR2011的best paper。
  • Boosting(Freund & Schapire 1996):

Fit many large or small trees to reweighted versions of the training data. Classify by weighted majority vote.

首先給個大致的概念,boosting在選擇hyperspace的時候給樣本加了一個權值,使得loss function儘量考慮那些分錯類的樣本(i.e.分錯類的樣本weight大)。

怎麼做的呢?

         - boosting重取樣的不是樣本,而是樣本的分佈,對於分類正確的樣本權值低,分類錯誤的樣本權值高(通常是邊界附近的樣本),最後的分類器是很多弱分類器的線性疊加(加權組合),分類器相當簡單。

AdaBoost和RealBoost是Boosting的兩種實現方法。general的說,Adaboost較好用,RealBoost較準確。

下面是AdaBoost進行權值設定與更新的過程:

以下是幾個演算法的效能比較:

對於多類分類(Multi-class),generalization~是類似的過程:

比如對資料進行K類分類,而不通過每次二類分類總共分K-1次的方法,我們只需要每個弱分類器比random guessing好(i.e. 準確率>1/K)

多類分類演算法流程:

多類分類器loss function的設計:

===============補充===============

資料探勘的十大演算法,以後可以慢慢研究:

C4.5

K-Means

SVM

Apriori

EM

PageRank

AdaBoost

kNN

NaiveBayes

CART

===============總結===============

Boosting可以進行變數選擇,所以最開始的component可以是簡單變數。

Boosting可能會overfit,因此在比較早的時候就停下來是正則化boosting的一個方法。

期待更多朋友一起補充……

Reference:

3. WIKI_Bagging (Bootstrap_aggregating)

關於Machine Learning更多的學習資料將繼續更新,敬請關注本部落格和新浪微博Sophia_qing