1. 程式人生 > >對於隨機森林的通俗理解

對於隨機森林的通俗理解

一、決策樹

決策樹是機器學習最基本的模型,在不考慮其他複雜情況下,我們可以用一句話來描述決策樹:如果得分大於等於60分,那麼你及格了。

這是一個最最簡單的決策樹的模型,我們把及格和沒及格分別附上標籤,及格(1),沒及格(0),那麼得到的決策樹是這樣的


但是我們幾乎不會讓計算機做這麼簡單的工作,我們把情況變得複雜一點

引用別的文章的一個例子


這是一張女孩對於不同條件的男性是否會選擇見面的統計表,圖中是否見面作為我們需要分類的結果,因此最後我們的結果無非就只是是和否兩種情況。這是一個二分類的問題,但是需要判斷的條件多了很多,現在不僅僅只是一個判斷就能得出結果了,但是從上圖我們找到了一個結果為否的記錄,因此如果一個男性在城市無房產、年收入小於 17w 且離過婚,則可以預測女孩不會跟他見面。

那麼問題就來了,在這種複雜的情況下,決策樹怎麼構建?

先通過城市是否擁有房產這條特徵,把這10個人劃分為2類


這個分類結果並不是很好,因為它沒有將見面與不見面完全的分開,在演算法中,當然不能憑我們的“感覺”去評價分類結果的好壞。我們需要用一個數去表示。

二、Gini不純度

Gini不純度是對分類結果好壞的度量標準(還可以用資訊熵和增益去表示,可自行了解)

他的值是:1-每個標籤佔總數的比例的平方和。即1mi=1fi2

對於上述的結果來講,總的集合D被分為兩個集合D1,D2,假設見面為1,不見面為0。

那麼D1的不純度為1-f1^2-f0^2,總數為5,見面的佔了全部,則f1=1,f0=0,結果為0

D2的不純度為1-f1^2-f0^2,f1=0.8,f0=0.2,結果為0.32

ok,那麼整個分類結果的Gini不純度就是D1/D與0的乘積 加上 D2/D與0.32的乘積,為0.16

Gini值代表了某一個分類結果的“純度”,我們希望結果的純度很高,這樣就不需要對這一結果進行處理了。

從以上分析可以看出,Gini值越小,純度越高,結果越好。

三、決策樹的生成

在第一個例子中“如果得分大於等於60分,那麼你及格了”中,生成決策樹步驟是首先選擇特徵,“得分”,然後確定臨界值,“>=60”

1.複雜的情況下也是一樣,對於每一個特徵,找到一個使得Gini值最小的分割點(這個分割點可以是>,<,>=這樣的判斷,也可以是=,!=),然後比較每個特徵之間最小的Gini值,作為當前最優的特徵的最優分割點(這實際上涉及到了兩個步驟,選擇最優特徵以及選擇最優分割點)。

2.在第一步完成後,會生成兩個葉節點,我們對這兩個葉節點做判斷,計算它的Gini值是否足夠小(若是,就將其作為葉子不再分類)

3.將上步得到的葉節點作為新的集合,進行步驟1的分類,延伸出兩個新的葉子節點(當然此時該節點變成了父節點)

4.迴圈迭代至不再有Gini值不符合標準的葉節點

四、決策樹的缺陷

我們用決策樹把一個平面上的眾多點分為兩類,每一個點都有(x1,x2)兩個特徵,下面展示分類的過程



最後生成的決策樹,取了四個分割點,在圖上的顯示如下,只要是落在中央矩形區域內預設是綠色,否則為紅色


不過這種情況是分類引數選擇比較合理的情況(它不介意某些綠色的點落在外圍),但是當我們在訓練的時候需要將所有的綠點無差錯的分出來(即引數選擇不是很合理的情況),決策樹會產生過擬合的現象,導致泛化能力變弱。

五、隨機森林

鑑於決策樹容易過擬合的缺點,隨機森林採用多個決策樹的投票機制來改善決策樹,我們假設隨機森林使用了m棵決策樹,那麼就需要產生m個一定數量的樣本集來訓練每一棵樹,如果用全樣本去訓練m棵決策樹顯然是不可取的,全樣本訓練忽視了局部樣本的規律,對於模型的泛化能力是有害的

產生n個樣本的方法採用Bootstraping法,這是一種有放回的抽樣方法,產生n個樣本

而最終結果採用Bagging的策略來獲得,即多數投票機制

隨機森林的生成方法:

1.從樣本集中通過重取樣的方式產生n個樣本

2.假設樣本特徵數目為a,對n個樣本選擇a中的k個特徵,用建立決策樹的方式獲得最佳分割點

3.重複m次,產生m棵決策樹

4.多數投票機制來進行預測

(需要注意的一點是,這裡m是指迴圈的次數,n是指樣本的數目,n個樣本構成訓練的樣本集,而m次迴圈中又會產生m個這樣的樣本集)

六、隨機森林模型的總結

隨機森林是一個比較優秀的模型,在我的專案的使用效果上來看,它對於多維特徵的資料集分類有很高的效率,還可以做特徵重要性的選擇。執行效率和準確率較高,實現起來也比較簡單。但是在資料噪音比較大的情況下會過擬合,過擬合的缺點對於隨機森林來說還是較為致命的。

參考文獻:

相親的例子引用自:

平面點分類的例子引用自:

Gini不純度:

隨機森林的優缺點分析:

隨機森林做特徵選擇: