天天看點

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

随機森林非常像《機器學習實踐》裡面提到過的那個AdaBoost算法,但差別在于它沒有疊代,還有就是森林裡的樹長度不限制。

因為它是沒有疊代過程的,不像AdaBoost那樣需要疊代,不斷更新每個樣本以及子分類器的權重。是以模型相對簡單點,不容易出現過拟合。

前言

       随機森林非常像《機器學習實踐》裡面提到過的那個AdaBoost算法,但差別在于它沒有疊代,還有就是森林裡的樹長度不限制。

       因為它是沒有疊代過程的,不像AdaBoost那樣需要疊代,不斷更新每個樣本以及子分類器的權重。是以模型相對簡單點,不容易出現過拟合。

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

架構流程

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

       随機森林可以了解為Cart樹森林,它是由多個Cart樹分類器構成的內建學習模式。其中每個Cart樹可以了解為一個議員,它從樣本集裡面随機有放回的抽取一部分進行訓練,這樣,多個樹分類器就構成了一個訓練模型矩陣,可以了解為形成了一個議會吧。

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

       設有N個樣本,M個變量(次元)個數,該算法具體流程如下:

1. 确定一個值m,它用來表示每個樹分類器選取多少個變量。(注意這也是随機的展現之一)

2. 從資料集中有放回的抽取 k 個樣本集,用它們建立 k 個樹分類器。另外還伴随生成了 k 個袋外資料,用來後面做檢測。

3. 輸入待分類樣本之後,每個樹分類器都會對它進行分類,然後所有分類器按照少數服從多數原則,确定分類結果。

性能制約

       1. 森林中的每個樹越茂盛,分類效果就越好。

       2. 樹和樹的枝葉穿插越多,分類效果就越差。

重要參數

1. 預選變量個數 (即架構流程中的m);

2. 随機森林中樹的個數。

       這兩個參數的調優非常關鍵,尤其是在做分類或回歸的時候。

建構随機森林模型

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

       函數重要參數說明:

- x,y參數自然是特征矩陣和标簽向量;

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

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

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

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

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

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

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

       對于一些解釋起來比較麻煩,以及情況不是很複雜的情況,直接使用随機森林進行特征選擇就可以了,下面為具體步驟:

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

       執行這個腳本後:

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

       其中的兩列是衡量變量重要性的名額,越高表示該變量對分類的影響越大。第一列是根據精度平均減少值作為标準度量,而第二列則是采用節點不純度的平均減少值作為度量标準。

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

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

使用随機森林繪制MDS二維圖

       通過MDS圖我們能大緻看出哪些類是比較容易搞混的:

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

       生成下圖:

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

       可以看出,第二列第三列存在着容易混淆的情況。

小結

       R語言包中提供的随機森林功能包還有很多,對于調優很有幫助,請務必查詢相關資料并掌握。

       另外,部分變種的随機森林算法還可以用來做回歸。 

繼續閱讀