1. 程式人生 > >淺談隨機森林(RF)

淺談隨機森林(RF)

在介紹隨機森林以前,須有決策樹(DT)的背景,決策樹在此不做介紹,這篇文章簡單介紹一下隨機森林以及優缺點。

整合學習

通過構建並結合多個分類器來完成學習任務。將多個學習器進行結合,常比獲得單一學習器更好的泛化效能。
目前整合學習方法大致可分為兩類,即個體學習器之間存在強依賴關係,必須序列生成的序列化方法,以及個體學習器之間不存在依賴關係,可同時生成的並行化方法;前者代表時Boosting, 後者代表是Bagging和隨機森林(random forest: RF)。

Bagging 和隨機森林

要得到泛化效能強的整合,則整合中的個體學習器應儘可能相互獨立。
“自助取樣法”:給定包含m個樣本的資料集, 先隨機選取一個樣本放入取樣集中,再把該樣本放回,重複m次隨機操作,得到含m個樣本的取樣集。這樣使得初始訓練集中有的樣本在取樣集中出現,有的從未出現。
如此,可以取樣出T個含m個樣本的取樣集,基於每個取樣集訓練出一個基礎學習器,將這些基礎學習器進行結合,這就是Bagging的基本流程。在對預測輸出進行結合時, Bagging通常對分類任務使用簡單投票,對迴歸任務使用簡單平均法。

關於決策樹:
決策樹實際是將空間用超平面(後面介紹svm也會提到)進行劃分的一種方法,每次分割,都將當前空間一份為二。

 


這樣使得每一個葉子節點都是在空間中的一個不相交的區域。決策時,會根據輸入樣本每一維feature的值,一步步往下,最後使樣本落入N個區域中的一個(假設有N個葉子節點)。

 

隨機森林是Bagging的一個擴充套件。隨機森林在以決策樹為基學習器構建Bagging整合的基礎上,進一步在決策樹的訓練過程中引入隨機屬性選擇(引入隨機特徵選擇)。傳統決策樹在選擇劃分屬性時在當前節點的屬性結合(d個屬性),利用資訊理論的知識選取一個最優屬性;而在隨機森林中, 對決策樹的每個節點,先從該節點的屬性集合中隨機選取包含k個屬性的子屬性集,然後選擇最優屬性用於劃分。這裡的引數k控制了隨機性的引入程度。若k=d, 則是一般的決策樹;k=1, 則是隨機選擇一個屬性進行劃分。隨機森林對用做構建樹的資料做了限制,使的生成的決策樹之間沒有關聯,提升演算法效果。

隨機森林的分類

隨機森林用於分類是,即採用n個決策樹分類,將分類結果用簡單投票得到最終分類,提高準確率。
隨機森林是對決策樹的整合,其兩點不同也在上面敘述中提到:

  1. 取樣差異:從含m個樣本的資料集中有放回取樣,得到含m個樣本的取樣集用於訓練。保證每個決策樹的訓練樣本不完全一樣。
  2. 特徵選擇差異:每個決策樹的k個分類特徵是所在特徵中隨機選擇的(k需要調參)。

隨機森林需要調整的引數:

  • 決策樹的個數m
  • 特徵屬性的個數 k
  • 遞迴次數(決策樹的深度)

實現流程

  1. 匯入資料並將特徵轉為float形式。
  2. 將資料集分成n份, 方便交叉驗證
  3. 構造資料子集(隨機取樣),並在指定特徵個數(假設m個,調參)下選擇最優特徵
  4. 構造決策樹(決策樹的深度)
  5. 建立隨機森林(多個決策樹的結合)
  6. 輸入測試集並進行測試,輸入預測結果。

隨機森林的優點:

  • 在當前的很多資料集上,相對其他演算法有著很大的優勢
  • 能夠處理高緯度(feature)的資料, 並且不同做特徵選擇。
  • 在訓練完後,能夠給出哪些feature比較重要
  • 建立隨機森林時, 對generlization error使用的是無偏估計
  • 訓練速度快
  • 在訓練過程中,能夠監測到feature間的相互影響
  • 容易做成並行化方法
  • 理解,實現簡單

基本理解後,可以參考一下別人和sklearn的相關演算法實現,可能的話,我也會做個簡單實現。



作者:swensun
連結:https://www.jianshu.com/p/51b7939dad74
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。