隨機森林是否需要後剪枝?sklearn為什麼沒有實現這個功能,是否有人實現了這個功能?

在使用隨機森林演算法的時候,常常需要通過限制最大深度,最大葉節點數目等防止過擬合,這些設置都具有一些盲目性,即使通過交叉驗證找到了合適的參數,這樣的設置也難免過於簡單粗暴。所以後剪枝也許是一個更好的選擇,不知道我的理解是否有偏差。如果我理解的沒錯的話,那麼sklearn為什麼沒有實現這個功能呢?


通常情況下, 隨機森林不需要後剪枝。

剪枝的意義是:防止決策樹生成過於龐大的子葉,避免實驗預測結果過擬合,在實際生產中效果很差

剪枝通常有兩種:

PrePrune:預剪枝,及早的停止樹增長,在每個父節點分支的時候計算是否達到了限制值

PostPrune:後剪枝,基於完全生長(過擬合)的樹上進行剪枝,砍掉一些對衡量函數影響不大的枝葉

剪枝的依據:

常見的有錯誤率校驗(判斷枝剪是降低了模型預測的正確率),統計學檢驗,熵值,代價複雜度等等

總結看來,枝剪的目的是擔心全量數據在某棵樹上的擬合過程中,過度判斷了每個點及其對應類別的關係,有如以下這張圖(以rule1rule2代替了rule3):

-----------------------------------------------------------------------------------------------------------------------------

隨機森林:

定義:它是一種模型組合(常見的Boosting,Bagging等,衍生的有gbdt),這些演算法最終的結果是生成N(可能會有幾百棵以上)棵樹,組合判斷最終結果

如何組合判斷?

1.通常我們會規定隨機森林裡面的每棵樹的選參個數,常見的有log,sqrt等等,這樣的選取是隨機選則的,這樣有一個好處,讓每一棵樹上都有了儘可能多的變數組合,降低過擬合程度

2.樹的個數及樹的節點的變數個數,通常的來說,最快捷的方式是先確定節點的變數個數為sqrt(變數的個數),然後在根據oob的準確率反過來看多個棵樹時最優,確定了樹的個數的時候再反過來確定mtry的個數,雖然有局限,但是也並不存在盲目性

3.我個人理解,隨機森林中的每一棵樹我們需要它在某一片的數據中有非常好的擬合性,它並不是一個全數據擬合,只需要在它負責那塊上有最佳的擬合效果。每次遇到這些數據(特徵)的時候,我們在最後匯總N棵樹的結果的時候,給這些數據對應的那塊模型以最高權重即可

最後總結一下,就是隨機森林裡面的每棵樹的產生通過選特徵參數選數據結構,都已經考慮了避免共線性避免過擬合,剩下的每棵樹需要做的就是儘可能的在自己所對應的數據(特徵)集情況下儘可能的做到最好的預測結果;如同,公司已經拆分好部門,你不需要考慮這樣拆分是不是公司運營最好的一個組合方式,你需要做的就是當公司需要你的時候,儘可能的做好自己的事情,就醬。

感謝 @王斯達 的指正,mtry是特徵個數而非層數


謝邀。

僅談談個人的看法,隨機森林已經通過隨機選擇樣本和特徵,保證了隨機性,不用後剪枝應該也能避免過擬合


後剪枝是為了避免過擬合,隨機森林隨機選擇變數與樹的數量,已經避免了過擬合,沒必要去剪枝了。


簡單地說,都是rule of thumb


一般rf要控制的是樹的規模,而不是樹的置信度,剪枝的作用其實被集成方法消解了,所以用處不大


推薦閱讀:

聚類與分類有什麼區別?
數據挖掘SPSS,Python,《機器學習實戰》先學什麼好?
LDA訓練出主題之後,怎麼再通過主題計算出一篇文檔對於所有主題的分布呢?
IBM spss modeler 是什麼?
如何從數據挖掘入門到數據挖掘高手?

TAG:數據挖掘 | 機器學習 | 決策樹 | sklearn |