R语言机器学习与临床预测模型36--随机森林Random Forest

本内容为【科研私家菜】R语言机器学习与临床预测模型系列课程

R小盐准备介绍R语言机器学习与预测模型的学习笔记

你想要的R语言学习资料都在这里, 快来收藏关注【科研私家菜】


01 什么是随机森林?

随机森林(RF,Random Forest)是非常具有代表性的Bagging集成算法,它的所有基评估器都是决策树,分类树组成的森林就叫做随机森林分类器,回归树所集成的森林就叫做随机森林回归器。
随机森林是一个用随机方式建立的,包含多个决策树的集成分类器。其输出的类别由各个树投票而定(如果是回归树则取平均)。随机森林的生成过程如下:

  1. 从原始样本中采取有放回抽样的方法选取n个样本;
  2. 对n个样本选取a个特征中的随机k个,用建立决策树的方法获得最佳分割点;
  3. 重复m次,获得m个决策树;
  4. 对输入样例进行预测时,每个子树都产生一个结果,采用多数投票机制输出。
    随机森林的优点
  5. 实现简单,训练速度快,可以并行实现,因为训练时树与树之间是相互独立的;
  6. 相比单一决策树,能学习到特征之间的相互影响,且不容易过拟合;
  7. 能处理高维数据(即特征很多),并且不用做特征选择,因为特征子集是随机选取的;
  8. 对于不平衡的数据集,可以平衡误差;
  9. 相比SVM,对特征缺失不敏感,因为待选特征也是随机选取;
  10. 训练完成后可以给出哪些特征比较重要。

随机森林的缺点

  1. 在噪声过大的分类和回归问题还是容易过拟合;
  2. 相比于单一决策树,它的随机性让我们难以对模型进行解释。
    随机森林在训练时,循环依次训练每一棵决策树,每棵树的训练样本都是从原始训练集中进行Bootstrap抽样得到。在训练决策树的每个节点时所用的特征也是随机抽样得到的,即从特征向量中随机抽出部分特征参与训练。


    决策树

随机森林

02 R语言实现

rf.pros <- randomForest(lpsa ~ ., data = pros.train)
rf.pros
plot(rf.pros)
which.min(rf.pros$mse)
set.seed(123)
rf.pros.2 <- randomForest(lpsa ~ ., data = pros.train, ntree = 75)
rf.pros.2
varImpPlot(rf.pros.2, scale = TRUE,
           main = "Variable Importance Plot - PSA Score")
importance(rf.pros.2)
rf.pros.test <- predict(rf.pros.2, newdata = pros.test)
#plot(rf.pros.test, pros.test$lpsa)
rf.resid <- rf.pros.test - pros.test$lpsa #calculate residual
mean(rf.resid^2)

set.seed(123)
rf.biop <- randomForest(class ~ ., data = biop.train)
rf.biop
plot(rf.biop)
which.min(rf.biop$err.rate[, 1])
set.seed(123)
rf.biop.2 <- randomForest(class ~ ., data = biop.train, ntree = 19)
#getTree(rf.biop,1)
rf.biop.2
rf.biop.test <- predict(rf.biop.2, 
                        newdata = biop.test, 
                        type = "response")
table(rf.biop.test, biop.test$class)
(139 + 67) / 209
varImpPlot(rf.biop.2)

data(Pima.tr)
data(Pima.te)
pima <- rbind(Pima.tr, Pima.te)
set.seed(502)
ind <- sample(2, nrow(pima), replace = TRUE, prob = c(0.7, 0.3))
pima.train <- pima[ind == 1, ]
pima.test <- pima[ind == 2, ]

set.seed(321)
rf.pima <- randomForest(type ~ ., data = pima.train)
rf.pima
# plot(rf.pima)
which.min(rf.pima$err.rate[,1])
set.seed(321)
rf.pima.2 <- randomForest(type ~ ., data = pima.train, ntree = 80)
rf.pima.2
rf.pima.test <- predict(rf.pima.2, 
                        newdata = pima.test, 
                        type = "response")
table(rf.pima.test, pima.test$type)

03 总结

随机森林是一种集成学习算法,它将多棵决策树进行整合来完成预测。对于分类问题预测结果是所有决策树预测结果的投票;对于回归问题,是所有决策树预测结果的均值。训练时,通过Bootstrap抽样来形成每棵决策树的训练集,训练每棵决策树的每个节点时,所用的特征也是从整个特征向量中抽取的一部分特征。通过将多棵决策树集成,以及每次用采样的样本和特征分量训练每棵决策树,可以有效的降低模型的方差。

随机森林是一种判别模型,既支持分类问题,也支持回归问题,并且支持多分类问题。它是一种非线性模型,其预测函数为分段常数函数。


关注科研私家菜(VX_GZH: SciPrivate),发送“随机森林”获取R语言源码和示例数据。


关注R小盐,关注科研私家菜(VX_GZH: SciPrivate),有问题请联系R小盐。让我们一起来学习 R语言机器学习与临床预测模型

你可能感兴趣的:(R语言机器学习与临床预测模型36--随机森林Random Forest)