隨機森林(Random Forest)算法原理總結

        前面幾篇我們探討了決策樹算法集成學習方法,今天我們就來探討下基於bagging集成的決策樹算法——隨機森林(Random Forest)。隨機森林雖然簡單,但它是最強大的機器學習算法之一,也是實際應用中非常常用的算法之一,是我們必須要掌握的算法。
        首先讓我們簡單的回顧下決策樹算法,因爲它是隨機森林的基礎。
       

1)決策樹

        決策樹最大的特點就是直觀,易解釋。大家生活中在某一個時刻也在無意或有意的使用它,比如我們之前舉的借錢的栗子。
        決策樹算法根據特徵選擇的方式不同,可以分爲ID3算法,C4.5算法,CART算法。在CART算法中,使用Gini指數做特徵選擇,選擇Gini指數最小的特徵以及其對應的切分點作爲最優特徵與最優的切分點,循環反覆直到滿足停止條件。
        由於決策樹幾乎不對訓練數據做任何的假設,在不添加任務約束,樹結構將會根據訓練數據的特性自由生長,達到百分百的正確率。爲了提高決策樹的泛化能力,決策樹使用了剪枝的方法。但是剪枝在減少模型方差的同時,也減小了模型的偏差(準確度)。那麼有沒有其他方法,在降低模型方差的同時,又不降低顯著降低模型偏差?非常巧,上一篇我們提到的bagging集成方法正好有這個特性。
        使用bagging集成多顆決策樹(CART樹)就叫做隨機森林。
       

2)隨機森林

        我們在上篇在探討bagging集成學習方法時,提到bagging集成方法有效的前提條件是,基模型之間必須保持低相關性,低相關性才能保證基模型之間的差異性,有差異性的基模型組合在一起才能成爲一個更強大模型。
        爲了讓CART樹有更大差異性,隨機森林除了對樣本進行隨機過採樣,增加訓練集的隨機性之外,還在樹的生成時引入了額外的隨機,即特徵隨機。在樹的生成時,選擇隨機採樣的特徵中的最好的特徵作爲分裂節點,這樣使得每棵樹有更大的差異性。

        下面我們總結下隨機森林的算法過程:
        輸入:數據量爲mm的訓練集DDTT顆CART樹
        輸出:最終的隨機森林f(x)f(x)
1)對訓練集DD進行mm次隨機過採樣,得到樣本量爲mm的採樣集DsampleD_{sample}
2)在所有屬性特徵中隨機選擇kk個屬性特徵,選擇最佳分割屬性特徵作爲節點構建CART樹T(x)T(x)
3)重複以上兩步TT次,即建立了TT顆決策樹;
4)這TT顆決策樹組成隨機森林。如果是分類算法預測,則通過投票表決數據最終屬於哪一個類別;如果是迴歸預測,則 通過平均作爲最終模型的輸出。
       

4)Out of Bag評價

        對於Bagging,採用有放回的採樣,那麼一些樣本可能被多次重複採樣,有一些可能不會被採樣。對於一個大小爲mm的訓練集進行隨機採樣,樣本每一次被採樣的概率爲1m\frac{1}{m},沒有被採樣到的概率爲11m1-\frac{1}{m}mm次都沒有被採樣到的樣本的概率爲(11m)m{(1-\frac{1}{m})}^m,當mm\rightarrow \infty時,
                                                                        limm+=1e0.368{\lim_{m \to +\infty}}=\frac{1}{e}\approx0.368
        也就是說,對於大小爲mm的訓練集,平均只有63.2%的樣本被每個分類器採樣,剩餘的36.8%沒有被採樣到,沒有被採樣的樣本被稱爲Out of Bag。
        注意,每個分類器的36.8%的樣本是不一樣的。由於分類器在訓練的時候沒有使用到Out of Bag的樣本數據,因此這部分可以用來評估分類器,進而不需要另外劃分驗證集或者做交叉驗證了。在sklearn隨機森林庫類中,你可以通過oob_score=True來自動評估,評估結果通過oob_score_查看,具體我們下篇再探討。
       

3)隨機森林的其他應用

        隨機森林除了做正常的分類與迴歸預測,還可以使用到其他的一些場景。

  • 計算特徵重要性
            使用隨機森林計算特徵的重要性應該是我們使用的最多的一個場景了。計算特徵重要性的指標有很多,可以使用經過特徵節點的樣本比例、特徵節點的純度減少、特徵在隨機森林所有的樹中的平均深度、或者隨機更換一些特徵,重新建立決策樹,計算新模型的正確率的變化。scikit-learn中隨機森林庫類通過將特徵貢獻的樣本比例與純度減少相結合得到特徵的重要性。

  • 異常值檢測——Isolation Forest
           使用隨機森林也可以做異常值檢測。原理爲,計算所有樹中每一個樣本從根到葉子的距離總和D(x)D(x),如果樣本爲異常值,它應該在大多數樹中很快就能從根到達葉子,即D(x)較小。

  • 計算樣本的相似度
           使用隨機森林還可以計算樣本的相似度。原理爲,如果兩個樣本同時出現在相同的葉節點的次數越多,則二者越相似。
           

4)總結

        下面我們對隨機森林算法的優缺點做一個總結。

        隨機森林的主要優點:

  • 支持並行處理;
  • 不需要對特徵進行標準化處理;
  • 不需要對特徵缺失值進行處理;
  • 模型較穩定,泛化能力強;
  • 模型可以輸出特徵重要性;
  • 使用Out of Bag,不需要單獨劃分測試集;

隨機森林的主要缺點:

  • 由於有多個基模型組合而成,模型不易解釋;
  • 樹較多時,訓練時間比較久;

       
        隨機森林是非常強大的算法,可以作爲我們做分類任務首要嘗試的算法。

(歡迎大家在評論區探討交流,也歡迎大家轉載,轉載請註明出處!)
       
上篇:集成學習方法之Bagging,Boosting,Stacking
下篇:Scikit-learn隨機森林算法庫總結與調參實踐

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章