随机森林

本文详细介绍了随机森林算法的工作原理,包括其构建过程、变量重要性的度量方式及如何使用R语言中的randomForest包实现随机森林。此外,还展示了利用随机森林对乳腺癌数据进行分类的具体案例。
  • 随机森林

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

  • 随机森林算法

涉及对样本单元和变量进行抽样,从而生成大量决策树,对每个样本单元来说,所有决策树依次对其进行分类,所有决策树预测类别中的众数类别即为随机森林所预测的一个样本单元的类别

假设训练集中共有 N 个样本单元,M个变量,则随机森林算法如下

(1)从训练集中随机有放回的抽取 N 个,生成大量的决策树

(2)在每一个节点随机抽取 m < M 个变量,将其作为分割该节点的候选变量,每一个节点处的变量数应一致

(3)完整生成所有决策树,无需剪枝(最小节点为1)

(4)终端节点的所属类别由节点对应的众数类别决定

(5)对于新的观测点,用所有的树对其进行分类,其类别由多数决定原则生成

生成树时没有用到的样本点所对应的类别可由生成树估计,与其真实类别比较即可的得到 袋外预测(out - of - bag,OOB) 误差,无法获得验证集时,这是随机森林的一大优势

randomForest包中的randomForest()函数可用与生成随机森林。函数默认生成500棵树,并且默认在每个节点处抽取sqrt(M)个变量,最小节点为1

对乳腺癌数据预测恶性类

> 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、需要促存储整个随机森林以对新样本单元分类

 

转载于:https://my.oschina.net/u/1785519/blog/1565259

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值