最近實作機器學習、隨機森林,搜尋很多資料,老實說很多網路文章都有解釋隨機森林,一開始看起來概念不難,想說,不就是這樣嗎!
但是隨著實作深入,才發現...原來一堆問題都需要深入思考探討細節,常常在問:這個怎麼辦! 誰可以告訴我答案! (吶喊)
這些細節中文搜尋不到,要到國外網路網站資源尋求解答,當然過程也非常瑣碎(掙扎) 。在這裡分享一下最近遇到的問題、找到的資料,給需要做隨機森林的人,也許我的問題你也會遇到,或者也許你有更好的解決方案可以與我一起分享。
隨機森林的概念
隨機森林其實就是進階版的決策樹,這句話簡單說明,就是很多顆樹加起來可以變成一座森林 XD 也因此,必須從解釋甚麼是決策樹開始。
決策樹示意圖 |
你通常會根據經驗,一步步篩選條件,例如以下這樣子(男性=>有犯案動機=>無不在場證明=>兇手!),而這些判斷條件(性別/是否與被害人有過節/案發時在哪裡) 就是你的決策樹變數。
簡單說,就是你手上有一包人,想辦法找到最適合的變數一步步依照條件把這些人切出來,然後找到你要的目標,這就是決策樹,很容易理解,也很容易解釋。
而隨機森林,就是這些樹的集合(ensemble)。
繼續用剛剛的例子解釋,你用剛剛那些條件找到的符合兇手的一小群人,可是你的條件就是對的嗎? 難道女性不可能犯案嗎? 難道有不在場證明一定不是兇手嗎? 不一定。所以需要更多人的意見來綜合、投票多數決,來找出最適合的條件。
你的意見是一顆樹、A的意見是一顆樹、B的意見又是另一棵樹...所有人的這些樹集合起來,就是隨機森林。隨機森林有點類似民主制度的多數決,因為每一顆樹會有過度配置(over-fitting)的狀況,而讓樹綜合起來,這樣的狀況得以改善。
好了,講完了,看起來似乎很容易,但其實沒有,真正的挑戰才正要開始呢,讓我一個個來頗析看完以上那段文字後,想要實際"操作"會遇到的問題。
隨機森林是如何抽樣?
隨機森林的步驟第一個重點是抽樣,而其中抽樣有大大的玄機,這個玄機圍繞著一個字「隨機」(隨機森林就是隨機重要阿~),有了隨機,樹的結果才會多元,有多元的結果,綜合起來會更具有準確度。
隨機森林的樣本抽樣設計是採取抽後放回的方法,也就是同一個樣本,被抽了之後,下一次還是有可能抽到他,一個人可能抽到很多次,也有可能沒抽到。
隨機還不只是樣本~ 變數也可以隨機抽! 例如說我跑100個變數,我第一顆樹只抽50個變數,第二顆抽不同50個變數...這樣每顆樹就不僅是樣本不同,連變數(特徵)也不太一樣了!
什麼是過度配置(over-fitting)?為什麼隨機森林能解決?
過度配置(或過度擬合、過適)我覺得Wiki的解釋很好:
是指在調適一個統計模型時,使用過多的參數,一個荒謬的模型只要夠複雜,是可以完美適應資料,達到很高的效度。
簡單說,就是不斷的調配模型讓效能很高,但卻無法預測未來的資料,有點像股市分析師提出某個理論可以完美解釋過去股價波動,但是一談到預測馬上就失準一樣。單顆決策樹沒有經過剪枝分到底,會選出很多變數分到很細,最後就容易出現過度配置的現象。
隨機森林能解決過度配置,根據原始論文的說法是在大數法則下,樹的結果會趨向一致,雖然單顆樹是過度複雜沒錯,但只要一開始抽樣的隨機性是足夠的,考慮各種組合的集合會是更接近真實的狀況,預測錯誤率大幅降低。想了解數學推導可以參考這個網站。
理論上隨機森林是不會過度配置的,然而實際上,操作隨機森林還是有可能遇到過度配置的問題,主要原因可能為樹的棵樹不夠無法反應大樹法則,或是抽樣時隨機性不夠,若變數之間相關性過高,會導致變數抽樣時可能會偏重某一些特徵,這樣樹種出來結果就不夠多樣性,過度配置就會產生。
這時候可以試試增加樹的棵樹,或是有必要再重新檢視各變數之間相關程度 , 或者是調整其他參數,像是樹的深度、節點最小size....(OS: 實際操作,就是要不斷的試、試、試!) ,有哪些調整參數可以參考一下這裡、這裡。
註: 關於過度配置,我寫了一篇更詳細解釋概念、解決方法: 「過度擬合,模型路上必經的難解題」
所謂Ensemble的概念是甚麼意思?
剛剛說過ensemble是集合,也就是把每一顆樹的結果綜合起來,有一個最終結果。
Ensemble在操作上簡單想就是所有樹的平均結果,例如說,A這個樣本在第一顆樹得到的機率是2%、第二顆樹3%、第3顆樹3%,這樣Ensemble結果就是(2%+4%+3%)/3=3%,不難理解。
Ensemble也有其他的形式,例如取投票,假如剛剛A的例子我認為2.5%以上算命中目標,那麼3顆樹裡面有兩顆認為A命中目標,則我們就預測A會命中目標。
什麼是OOB(Out of Bag Error)?該如何計算?
OOB同樣的wiki解釋的很好,甚至比原始論文清楚許多:
「OOB is the mean prediction error on each training sample xᵢ, using only the trees that did not have xᵢ in their bootstrap sample」--OOB是從每一個沒有樣本Xi的樹裡計算出的預測誤差。
用以下的圖解來說明:
甚麼是OOB? |
他的精隨在因為每一顆樹不會用到全部的樣本學習,那些沒有用來學習的樣本當然就可以當驗證,算是很巧妙的設計,這樣就節省了驗證的力氣!!!~想更深入了解有關OOB可以觀賞以下這段影片,非常非常清楚的說明。
參考資源推薦:
1. 理論-台大老師的隨機森林相關影片: 台大資工系林軒田副教授機器學習系列影片,從決策樹理論開始,包含隨機森林的理論跟變數重要性處理方法都有帶到~ 還有其他延伸的相關機器學習方法,講解非常清楚!
2. 理論-Stack Exchange: 在實作的期間會遇到非常多困惑的問題,尤其是要從理論底層開始操作起,會不斷狂問自己,這樣操作到底有沒有問題?這時候就可以參考前人經驗,這裡類似討論區,有很多人問過關於統計模型的問題討論,不少回答也都非常專業!
3. 理論-SAS help HP Forest Detail: SAS內部有自建的隨機森林模式(Hp forest),針對這個模式作的理論講解,裡面最有價值的是提到各種隨機森林會遇到的問題,以及Hp forest是如何解決
,還有參考了哪些重要理論,很有脈絡的說明隨機森林,推薦詳讀!
4.理論- 隨機森林原始論文: Breiman 2003年提出的原始論文,可以稍微了解作者提出這個概念的想法(數學多,慎入~)。
5. 操作工具- SAS 機器學習討論區: SAS或EM操作中也會遇到很多疑惑,SAS討論區常有專人出來解決疑惑,很值得參考。
結語
以上就是我粗淺的分享所獲的學習資源跟心得了,然而我覺得這個領域實在太過博大精深,而且不斷在發展中,學習跟實際操作真的有相當難度。
然而萬事起頭難,小小的第一步總是已經邁出~ 期待能多多少少幫到有緣閱讀這篇文章的你。
沒有留言:
張貼留言