1. 程式人生 > >Bagging:隨機森林及Python實現

Bagging:隨機森林及Python實現

隨機森林是bagging的代表

1、bagging:  

    bootstrap sampling:自助取樣法。給定包含m個樣本的資料集,我們先隨機取出一個樣本放入取樣集中,再把該樣本放回初始資料集,使得下次取樣時,該樣本仍有可能被選中,這樣,經過m次隨機取樣操作,我們得到含m個樣本的取樣集,初始訓練集中有的樣本在取樣集裡多次出現,有的則從未出現,初始訓練集約有63.2%的樣本出現在取樣集中。

    bagging是bootstrap sampling的縮寫。基於自主取樣法,可以取樣出T個含m個樣本的取樣集,然後基於每個取樣集,訓練處一個基學習器,再將這些基學習器進行結合,這就是bagging的基本流程。

2、什麼是隨機森林RF(Random Forests)

    bagging是bootstrap aggregating的縮寫,採用的是隨機有放回的選擇訓練資料然後構造分類器。   

    隨機森林是bagging的一個擴充套件,在以決策樹為基學習器構建bagging整合的基礎上,進一步在決策樹的訓練中,引入隨機屬性選擇。其基本思想就是構造很多棵決策樹,形成一個森林,每一棵樹都會給出自己的分類選擇,並由此進行“投票”,森林整體的輸出結果將會是票數最多的分類選項;

    在整個隨機森林構建中,有兩個隨機過程,使隨機森林很大程度上,因個體學習器之間差異度的增加,而避免過擬合現象:

  • 資料樣本選擇的隨機:隨機的從整體的訓練資料中選取一部分,作為一棵決策樹的構建,而且是有放回的選取;

  • 特徵(x)的隨機:每棵決策樹的構建所需的特徵是從整體的特徵集隨機的選取的。

3、隨機森林工作過程:

隨機森林在bagging的基礎上更進一步:

  • 樣本的隨機:從樣本集N中用Bootstrap,有放回的隨機選取n個樣本

  • 特徵的隨機:從所有屬性K中隨機選取k個屬性,選擇最佳分割屬性作為節點建立CART決策樹(泛化的理解,這裡面也可以是其他型別的分類器,比如SVM、Logistics)

  • 重複以上兩步m次,即建立了m棵CART決策樹,不需要剪枝。

  • 這m個CART形成隨機森林,通過投票表決結果,決定資料屬於哪一類(投票機制有一票否決制、少數服從多數、加權多數)

4、隨機森林的優點與缺點

優點:

  • 可積極分類、迴歸兩類問題,並在這兩個方面都有相當好的估計表現;

  • 它能夠處理很高維度(feature很多)的資料,並且不用做特徵選擇,對資料集的適應能力強:既能處理離散型資料,也能處理連續型資料,資料集無需規範化。

  • 在對缺失資料進行估計時,隨機森林是一個十分有效的方法。就算存在大量的資料缺失,隨機森林也能較好地保持精確性;

  • 當存在分類不平衡的情況時,隨機森林能夠提供平衡資料集誤差的有效方法;

  • 模型的上述效能可以被擴充套件運用到未標記的資料集中,用於引導無監督聚類、資料透視和異常檢測;

  • 在資料集上表現良好,兩個隨機性的引入,使得隨機森林不容易陷入過擬合。

缺點:

  • 隨機森林在解決迴歸問題時並沒有像它在分類中表現的那麼好,這是因為它並不能給出一個連續型的輸出。當進行迴歸時,隨機森林不能夠作出超越訓練集資料範圍的預測,這可能導致在對某些還有特定噪聲的資料進行建模時出現過度擬合。

  • 對於許多統計建模者來說,隨機森林給人的感覺像是一個黑盒子——你幾乎無法控制模型內部的執行,只能在不同的引數和隨機種子之間進行嘗試。

4、隨機森林的上機實現程式

 本文介紹三種實現方法:第一種和第二種通過sklearn的DecisionTreeClassifier實現,第三種為sklearn的RandomForestClassifier實現,很明顯,第三種方法最簡單。

資料準備1:匯入資料

0?wx_fmt=png

0?wx_fmt=png

資料準備2:設定訓練集及測試集

0?wx_fmt=png

方法1:兩顆樹看具體的實現方式

0?wx_fmt=png

方法2:10課樹,迴圈實現方式

0?wx_fmt=png

方法3:通過隨機森林直接建立5課樹的實現方式,最簡單。

0?wx_fmt=png

參考文章地址:

http://developer.51cto.com/art/201509/491308.htm

http://www.csdn.net/article/2015-03-02/2824069