機器學習之隨機森林(簡單理解)

以前簡單介紹了決策樹,這篇文章簡單介紹一下隨機森林以及優缺點。html

集成學習

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

Bagging 和隨機森林

要獲得泛化性能強的集成,則集成中的個體學習器應儘量相互獨立。 「自助採樣法」:給定包含m個樣本的數據集, 先隨機選取一個樣本放入採樣集中,再把該樣本放回,重複m次隨機操做,獲得含m個樣本的採樣集。這樣使得初始訓練集中有的樣本在採樣集中出現,有的從未出現。 如此,能夠採樣出T個含m個樣本的採樣集,基於每一個採樣集訓練出一個基礎學習器,將這些基礎學習器進行結合,這就是Bagging的基本流程。在對預測輸出進行結合時, Bagging一般對分類任務使用簡單投票,對迴歸任務使用簡單平均法。dom

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

image.png

這樣使得每個葉子節點都是在空間中的一個不相交的區域。決策時,會根據輸入樣本每一維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. 輸入測試集並進行測試,輸入預測結果。

隨機森林的優勢:.net

  • 在當前的不少數據集上,相對其餘算法有着很大的優點
  • 可以處理高緯度(feature)的數據, 而且不一樣作特徵選擇。
  • 在訓練完後,可以給出哪些feature比較重要
  • 建立隨機森林時, 對generlization error使用的是無偏估計
  • 訓練速度快
  • 在訓練過程當中,可以監測到feature間的相互影響
  • 容易作成並行化方法
  • 理解,實現簡單

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

參考文章:
機器學習中的算法(1)-決策樹模型組合之隨機森林與GBDT
隨機森林的原理分析及Python代碼實現code

相關文章
相關標籤/搜索