隨機森林的一點點自己理解


  最近想學習一下機器學習方面的知識,在此做一下記錄,分享一下學習的一點點收獲!

參考:

  1. http://www.cnblogs.com/LeftNotEasy/archive/2011/03/07/1976562.html
  2. http://www.cnblogs.com/tornadomeet/archive/2012/11/06/2756361.html

  學習隨機森林之前,應該了解決策樹的方法。決策樹是一種基本的分類回歸方法。他就是類似於IF~else~的思想。首先(1)對於N個樣本的M個屬性,我們先選擇一個屬性,按照該屬性Mi的取值將分類問題划分為2個(或多個)子集。然后對於每一科分支子樹去除Mi屬性,然后對每一個子樹重復(1)的過程。決策樹也逐漸下降!每一科子樹的屬性值也越來越少。這里最終形成的樹並非一顆完全樹。葉子節點的高度也是不一樣的!

這樣,當決策樹到達最低短的時候,及說明如果一個樣本Yt出現的時候,先按照決策樹的第一個屬性值,指出他屬於哪個分支!一層一層,直到葉子節點。這時候,葉子節點的類別標簽就是測試樣本Yt的類別。

經過決策樹划分的空間最終會形成一個超空間的划分:下圖的屬性只有X,Y2個,而且每種屬性的取值只有2種。在實際的問題中可能會很多。從這里也可以理解決策樹解決的問題是屬性值需要是離散的。

image

對於屬性的選擇順序,可以利用信息增益的方法(http://www.autonlab.org/tutorials/infogain.html)。

隨機森林(Random Forest):

    隨機森林是一個最近比較火的算法,它有很多的優點:

  •     在數據集上表現良好
  •     在當前的很多數據集上,相對其他算法有着很大的優勢
  •     它能夠處理很高維度(feature很多)的數據,並且不用做特征選擇
  •     在訓練完后,它能夠給出哪些feature比較重要
  •     在創建隨機森林的時候,對generlization error使用的是無偏估計
  •     訓練速度快
  •     在訓練過程中,能夠檢測到feature間的互相影響
  •     容易做成並行化方法
  •     實現比較簡單

隨機森林顧名思義,是用隨機的方式建立一個森林,森林里面有很多的決策樹組成,隨機森林的每一棵決策樹之間是沒有關聯的。在得到森林之后,當有一個新的輸入樣本進入的時候,就讓森林中的每一棵決策樹分別進行一下判斷,看看這個樣本應該屬於哪一類(對於分類算法),然后看看哪一類被選擇最多,就預測這個樣本為那一類。

 

當可以生成好決策樹后,就比較容易生成隨機森林了。下面是隨機森林的構造過程:

 

  1. 假如有N個樣本,則有放回的隨機選擇N個樣本(每次隨機選擇一個樣本,然后返回繼續選擇)。這選擇好了的N個樣本用來訓練一個決策樹,作為決策樹根節點處的樣本。

 

  2. 當每個樣本有M個屬性時,在決策樹的每個節點需要分裂時,隨機從這M個屬性中選取出m個屬性,滿足條件m << M。然后從這m個屬性中采用某種策略(比如說信息增益)來選擇1個屬性作為該節點的分裂屬性。

 

  3. 決策樹形成過程中每個節點都要按照步驟2來分裂(很容易理解,如果下一次該節點選出來的那一個屬性是剛剛其父節點分裂時用過的屬性,則該節點已經達到了葉子節點,無須繼續分裂了,這一點保證了樹的高度肯定是<=M的)。一直到不能夠再分裂為止。注意整個決策樹形成過程中沒有進行剪枝。

 

  4. 按照步驟1~3建立大量的決策樹,這樣就構成了隨機森林了。

 

  從上面的步驟可以看出,隨機森林的隨機性體現在每顆數的訓練樣本是隨機的,樹中每個節點的分類屬性也是隨機選擇的。有了這2個隨機的保證,隨機森林就不會產生過擬合的現象了。

 

 

 

  隨機森林有2個參數需要人為控制,一個是森林中樹的數量,一般建議取很大。另一個是m的大小,推薦m的值為M的均方根。

 


免責聲明!

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



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