隨機森林

  • 隨機森林

是一種有組成式的有監督學習方法,在隨機森林中,咱們同時生成多個預測模型,並將模型的結果彙總以提高分類準確率算法

  • 隨機森林算法

涉及對樣本單元和變量進行抽樣,從而生成大量決策樹,對每一個樣本單元來講,全部決策樹依次對其進行分類,全部決策樹預測類別中的衆數類別即爲隨機森林所預測的一個樣本單元的類別dom

假設訓練集中共有 N 個樣本單元,M個變量,則隨機森林算法以下函數

(1)從訓練集中隨機有放回的抽取 N 個,生成大量的決策樹學習

(2)在每個節點隨機抽取 m < M 個變量,將其做爲分割該節點的候選變量,每個節點處的變量數應一致spa

(3)完整生成全部決策樹,無需剪枝(最小節點爲1)rest

(4)終端節點的所屬類別由節點對應的衆數類別決定code

(5)對於新的觀測點,用全部的樹對其進行分類,其類別由多數決定原則生成orm

生成樹時沒有用到的樣本點所對應的類別可由生成樹估計,與其真實類別比較便可的獲得 袋外預測(out - of - bag,OOB) 偏差,沒法得到驗證集時,這是隨機森林的一大優點it

randomForest包中的randomForest()函數可用與生成隨機森林。函數默認生成500棵樹,而且默認在每一個節點處抽取sqrt(M)個變量,最小節點爲1io

對乳腺癌數據預測惡性類

> library(randomForest)
> set.seed(1234)
> fit.forest <- randomForest(class~.,data = df.train,na.action = na.roughfix,importance = T) #生成樹
> fit.forest

Call:
 randomForest(formula = class ~ ., data = df.train, importance = T,na.action = na.roughfix) 
               Type of random forest: classification
                     Number of trees: 500  #從訓練集中有放回的隨機抽取498個觀測點,在每棵樹的每一個節點隨機抽取3個變量,從而生成了500棵傳統決策樹
No. of variables tried at each split: 3    

        OOB estimate of  error rate: 3.68%
Confusion matrix:
          benign malignant class.error
benign       319        10  0.03039514
malignant      8       152  0.05000000

na.action = na.roughfix  參數可將數值變量中的缺失值替換成對應列的中位數,類別變量中的缺失值替換成對應列的衆數類(如有多個衆數則隨機選一個)

隨機森林可度量變量重要性,經過設置importance = T,參數來獲得,並經過importance()函數輸出, 由 type=2 參數獲得變量相對重要性就是分割該變量時節點不純度(異質性)的降低總量對全部樹取平均。節點 不純度由Gini係數定義。本例中sizeUniformity是最重要的變量,mitosis是最不重要的變量

> importance(fit.forest,type=2) #給出變量重要性
                         MeanDecreaseGini
clumpThickness                  12.504484
sizeUniformity                  54.770143   #Gini係數最大,最重要的變量
shapeUniformity                 48.662325
maginalAdhesion                  5.969580
singleEpithelialCellSize        14.297239
bareNuclei                      34.017599
blandChromatin                  16.243253
normalNucleoli                  26.337646
mitosis                          1.814502   #Gini係數最小,最不重要的變量

對訓練集外樣本點分類(對驗證集中的樣本單元進行分類),並計算預測準確率

> forest.pred <- predict(fit.forest,df.validate)
> forest.perf <- table(df.validate$class,forest.pred,dnn = c("Actual","Predicted"))
> forest.perf
           Predicted
Actual      benign malignant
  benign       117         3
  malignant      1        79      #整體來看,對驗證集的預測準確率高達98%
  • 隨機森林的優劣勢

優點

a、randomForest包根據傳統決策樹生成隨機森林,而 party包中的 cforest()函數則可基於條件推斷生成隨機森林。

當預測變量間高度相關時,基於條件推斷樹的隨機森林可能效果更好

b、相對與其餘分類方法,隨機森林的分類準確率一般更高。

c、隨機森林算法可處理大規模問題(即多樣本單元,多變量),能夠處理訓練集中有大量缺失值的數據,也可應對變量遠多於樣本單元的數據。

d、可計算 袋外預測偏差(OOB error)、度量變量重要性也是隨機森林的兩個明顯優點

缺點

a、明顯缺點是分類方法(此例中至關於500棵決策樹)較難理解和表達

b、須要促存儲整個隨機森林以對新樣本單元分類

相關文章
相關標籤/搜索