第九篇:隨機森林(Random Forest)

前言

       隨機森林很是像《機器學習實踐》裏面提到過的那個AdaBoost算法,但區別在於它沒有迭代,還有就是森林裏的樹長度不限制。算法

       由於它是沒有迭代過程的,不像AdaBoost那樣須要迭代,不斷更新每一個樣本以及子分類器的權重。所以模型相對簡單點,不容易出現過擬合。架構

       下面先來說講它的具體框架流程。框架

框架流程

       

       隨機森林能夠理解爲Cart樹森林,它是由多個Cart樹分類器構成的集成學習模式。其中每一個Cart樹能夠理解爲一個議員,它從樣本集裏面隨機有放回的抽取一部分進行訓練,這樣,多個樹分類器就構成了一個訓練模型矩陣,能夠理解爲造成了一個議會吧。dom

       而後將要分類的樣本帶入這一個個樹分類器,而後以少數服從多數的原則,表決出這個樣本的最終分類類型。機器學習

       設有N個樣本,M個變量(維度)個數,該算法具體流程以下:函數

1. 肯定一個值m,它用來表示每一個樹分類器選取多少個變量。(注意這也是隨機的體現之一)
2. 從數據集中有放回的抽取 k 個樣本集,用它們建立 k 個樹分類器。另外還伴隨生成了 k 個袋外數據,用來後面作檢測。
3. 輸入待分類樣本以後,每一個樹分類器都會對它進行分類,而後全部分類器按照少數服從多數原則,肯定分類結果。性能

性能制約

       1. 森林中的每一個樹越茂盛,分類效果就越好。
       2. 樹和樹的枝葉穿插越多,分類效果就越差。學習

重要參數

1. 預選變量個數 (即框架流程中的m);
2. 隨機森林中樹的個數。spa

       這兩個參數的調優很是關鍵,尤爲是在作分類或迴歸的時候。rest

構建隨機森林模型

       函數名:randomForest(......);

       函數重要參數說明:

- x,y參數天然是特徵矩陣和標籤向量;

- na.action:是否忽略有缺失值的樣本;

- ntree:樹分類器的個數。500-1000爲佳;

- mtry:分枝的變量選擇數;

- importance:是否計算各個變量在模型中的重要性(後面會提到)。

       構建好模型以後,帶入predict函數和待預測數據集就可得出預測結果。然而,R語言中對隨機森林這個機制的支持遠遠不止簡單的作分類這麼簡單。它還提供如下這幾個功能,在使用這些功能以前,都要先調用randomForest函數架構出模型。

使用隨機森林進行變量篩選

       以前的文章提到過使用主成分分析法PCA,以及因子分析EFA,可是這兩種方法都有各自的缺點。它們都是屬於變量組合技術,會造成新的變量,以後通常還須要一個解釋的階段。

       對於一些解釋起來比較麻煩,以及狀況不是很複雜的狀況,直接使用隨機森林進行特徵選擇就能夠了,下面爲具體步驟:

       

       執行這個腳本後:

       

       其中的兩列是衡量變量重要性的指標,越高表示該變量對分類的影響越大。第一列是根據精度平均減小值做爲標準度量,而第二列則是採用節點不純度的平均減小值做爲度量標準。

       重要度的計量方法參考下圖(摘自百度文庫):

       

使用隨機森林繪製MDS二維圖

       經過MDS圖咱們能大體看出哪些類是比較容易搞混的:

       

       生成下圖:

       

       能夠看出,第二列第三列存在着容易混淆的狀況。

小結

       R語言包中提供的隨機森林功能包還有不少,對於調優頗有幫助,請務必查詢相關資料並掌握。

       另外,部分變種的隨機森林算法還能夠用來作迴歸。 

相關文章
相關標籤/搜索