随机森林

  • 随机森林

是一种有组成式的有监督学习方法,在随机森林中,咱们同时生成多个预测模型,并将模型的结果汇总以提高分类准确率算法

  • 随机森林算法

涉及对样本单元和变量进行抽样,从而生成大量决策树,对每一个样本单元来讲,全部决策树依次对其进行分类,全部决策树预测类别中的众数类别即为随机森林所预测的一个样本单元的类别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、须要促存储整个随机森林以对新样本单元分类

相关文章
相关标签/搜索