隨機森林算法通俗易懂版本


用通俗易懂的方式剖析隨機森林

 0.引言

 隨機森林是現在比較流行的一個算法。對於回歸和分類問題有很好的效果,它的內在的機理到底是什么呢?接下來將會用通俗易懂的方式講一講隨機森林。  

1.什么是隨機森林  

隨機森林分解開來就是“隨機”和“森林”。“隨機”的含義我們之后講,我們先說“森林”,森林是由很多棵樹組成的,因此隨機森林的結果是依賴於多棵決策樹的結果,這是一種集成學習的思想。森林里新來了一只動物,森林舉辦森林大會,判斷這到底是什么動物,每棵樹都必須發表意見,票數最多的結果將是最終的結果。隨機森林最終的模型見下圖示:    

森林中的每棵樹是怎么構建出來的,是不是每棵樹都是判斷正確的樹,這是我們需要考慮的一些問題。接下來我們就來看一看森林中的每棵樹是怎么來的?怎么選出“優秀”的樹?  

1.如何構建一棵樹  

假設共有個樣本,M個特征。  這里我們講“隨機”的含義。對於每棵樹都有放回的隨機抽取訓練樣本,這里抽取隨機抽取的樣本作為訓練集,再有放回的隨機選取個特征作為這棵樹的分枝的依據,這里要注意。這就是“隨機”兩層含義,一個是隨機選取樣本,一個是隨機選取特征。這樣就構建出了一棵樹,需要注意的是這里生成的樹都是完全生長的樹(關於為什么是要完全生長的樹,我認為的原因是便於計算每個特征的重要程度,剪枝的話將無法進行計算,一棵樹的構建方式如下圖所示:    

按照這種方法,可以構建出很多棵樹,那么這么多棵樹綜合評判的結果可以作為最后的結果嗎?

當然不是的,隨機森林真正厲害的地方不在於它通過多棵樹進行綜合得出最終結果,而是在於通過迭代使得森林中的樹不斷變得優秀(森林中的樹選用更好的特征進行分枝)。上面的一個森林相當於第一次迭代得到的森林。那么隨機森林是怎么往后迭代的呢?  

2.如何選出優秀的特征  

隨機森林的思想是構建出優秀的樹,優秀的樹需要優秀的特征。那我們需要知道各個特征的重要程度。  對於每一棵樹都有個特征,要知道某個特征在這個樹中是否起到了作用,可以隨機改變這個特征的值,使得“這棵樹中有沒有這個特征都無所謂”,之后比較改變前后的測試集誤差率,誤差率的差距作為該特征在該樹中的重要程度,測試集即為該樹抽取樣本之后剩余的樣本(袋外樣本)(由袋外樣本做測試集造成的誤差稱為袋外誤差)。  在一棵樹中對於個特征都計算一次,就可以算法個特征在該樹中的重要程度。我們可以計算出所有樹中的特征在各自樹中的重要程度。但這只能代表這些特征在樹中的重要程度不能代表特征在整個森林中的重要程度。那我們怎么計算各特征在森林中的重要程度呢?每個特征在多棵數中出現,取這個特征值在多棵樹中的重要程度的均值即為該特征在森林中的重要程度。如下式:                                              

 

其中表示特征在森林中出現的次數。表示第棵樹中屬性值改變之后的袋外誤差,表示第棵樹中正常值的袋外誤差。可以用下圖來表示:    

 這樣就得到了所有特征在森林中的重要程度。將所有的特征按照重要程度排序,去除森林中重要程度低的部分特征,得到新的特征集。這時相當於我們回到了原點,這算是真正意義上完成了一次迭代。

 3.如何選出最優秀的森林  

按照上面的步驟迭代多次,逐步去除相對較差的特征,每次都會生成新的森林,直到剩余的特征數為為止。最后再從所有迭代的森林中選出最好的森林。迭代的過程如下圖所示:    

 

 

得到了每次迭代出的森林之后,我們需要選擇出最優秀的森林(隨機森林畢竟是集成學習,所以最后的森林不一定是最優的。

那么我們怎么比較這些森林的好壞呢?這時我們需要引入一個指標來評價一個森林的好壞,上面的用於評價套外樣本在樹中的誤差率,這里的評價套外樣本在森林中的誤差率。(因為都是利用套外樣本,所以名字都是(out-of-bag))  每個樣本在多棵樹中是套外樣本,通過多棵樹的預測這個樣本的結果。預測方式如下圖所示:      

 

預測出所有所有樣本的結果之后與真實值進行比較,就可以得到這個森林的套外誤差率。  

選擇套外誤差率最小的森林作為最終的隨機森林模型。    

以上就是我對隨機森林的理解,希望可以幫助到大家。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM