如何評價周志華深度森林模型
來自專欄 信數據得永生
這篇文章背後的思路實際上是這樣的:
DNN(或者說 MLP)其實就是堆起來的廣義線性模型(比如 logistic,但也有其他激活函數)。它能夠自動發現特徵與標籤之間的非線性關係,當決策邊界非線性,並且你懶得手動去找非線性關係時,可以用它一把梭。
既然廣義線性模型能這麼玩,為何隨機森林,或其它回歸器/預測器能不能也這麼玩?隨機森林本身就是集成了,為何要再集成一次,不要關心這個,這個模型的好處就是,隨機森林可以無縫替換為任何預測器。
答案當然是可以,但有個小的變化。要注意廣義線性模型是參數模型,所以在 DNN 中,我們採用非貪婪式(也就是所謂的端到端)訓練(除了自編碼器)。但如果把隨機森林堆起來,就不能這樣,因為沒有所謂的正向和反向傳播過程。只能將每個森林訓練完畢,再把輸出扔給下一層。
後來它就成為了 Kaggle 上常用的 Stacking,或者 Blending 集成:
原理大致是這樣:
將輸入分成互斥的 K 份,對於每一份訓練一個預測器,使用其它幾份用於訓練,當前的那份用於預測。將這些預測器放進一組,並連接預測結果。之後,重複這個操作來訓練幾組其它的預測器(最好是不同類型的),並得到其它一些預測結果。將這些預測結果疊起來作為新的特徵,重複這個過程。在最後一輪重複中進行常規的分類或者回歸操作。
以上是訓練過程,對於預測過程,將輸入依次扔給每一輪的每組預測器,每組的結果取平均(或眾數),不同組的結果堆疊起來扔給下一層。
要注意兩點:1)對於任何一個預測器,訓練集和測試集都是不相交的,這樣保證了它的質量。2)經過一輪之後,下一輪的輸入還是個數據集,也就是說這個過程可以反覆進行下去。不出現過擬合的情況下,你想進行多少輪就進行多少輪,每輪想創建幾組就創建幾組。
的確這樣很有效,不僅僅根據論文里的數據,這種方法長期佔據 Kaggle 的前 10% 就足以說明這一點。
除了有效之外,這種方法實現了非參數預測器的堆疊。眾所周知,非參數預測器的開銷比參數預測器小的多,所以 Stacking 開銷據說也比 DNN 小。
但我不得不說,從思路上來看的確很水,於是就變了誰先把數據跑對了誰能發 paper。據說我這邊一個師兄也提前想出來了,並且做出來了,效果不錯,但是他發在了 bioinfo 的相關期刊上,根本沒人注意。可見選對領域很重要,跟著生物真是倒八輩子霉。
以上。
推薦閱讀:
※台灣大學機器學習:Ensemble 隨堂筆記
※<EYD與機器學習>七:Ensemble Learning and Random Forests