问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于决策树的集成模型——随机森林方法介绍

创作时间:
作者:
@小白创作中心

基于决策树的集成模型——随机森林方法介绍

引用
1
来源
1.
https://www.bilibili.com/read/mobile?id=40384247

今天我们继续介绍机器学习最经典也是使用最为广泛的模型——随机森林(Random Forest),该模型自2001年由Leo Breiman提出以来,就成为机器学习领域重要的分析工具。

在今天这篇文章中,我们将简单探讨随机森林的基本原理以及如何用R语言进行实践,大家也可以用文中的代码进行尝试。

开门见山,随机森林这个名称真的非常符合这一模型的特点,我们结合下面的示意图来看随机森林模型的具体运算步骤:

从上述示意图中,我们也能得出随机森林模型基本的分析思路:

  1. 从原始训练数据集中通过自助采样法(bootstrap sampling)有放回地随机抽取一定数量的数据,数量一般和原观测数相等,形成多个不同的子数据集;

  2. 对每个子数据集训练一棵决策树,但决策树的每个决策节点不使用所有特征,而是随机选取部分特征,再从这些特征中根据数据“纯度”指标选择特征进行数据划分;

  3. 按照上述方式得到多棵不尽相同的决策树形成森林,对于测试数据集,综合所有决策树的预测结果得到最终预测结果。

例如对于分类任务,可以取所有决策树预测类别中数量最多的那一类作为个体的最终分类结果;

对于回归任务,可以取所有决策树预测结果的平均值作为个体的预测值。

可以发现随机森林能分成「随机」+「森林」两部分来理解,这个名称和模型特点相当贴切了。上面3个步骤都不复杂,只要看懂了上一篇决策树的推文——《15分钟带你吃透决策树模型的三大经典算法》,相信很快就能够理解随机森林模型是怎么一回事了。

√除此之外,模型的开发动机、核心参数等问题也是有必要了解的,我们也借此机会解答大家最关心的三个问题:

我们还是利用MASS包中的biopsy数据集,数据集详细介绍见公众号推文

机器学习入门(5)| Logistic回归模型

√首先是加载并处理数据集:

细胞特征变量包括:细胞浓度(nd)、细胞大小均匀度(jyd.size)、细胞形状均匀度(jyd.shape)、边缘黏着度(nzd)、单上皮细胞大小(size.dsp)、裸细胞核(lxbh)、平和染色质(rsz)、正常核仁(hr)、有丝分裂状态(ysfl)。

class变量是肿瘤良恶性诊断结果,“benign”是良性,“malignant”是恶性,该变量是我们分析的结果变量。

√其次将数据集按7:3比例随机划分为训练集和测试集:

√接着训练随机森林模型并查看过程中的一些信息:

randomForest()函数默认的决策树算法是CART,树的数量ntree是500棵,对于分类任务,默认的生成单棵决策树时每个决策节点随机选取的变量数mtry

,即自变量数量的根号后取整。我们的数据有9个自变量,因此mtry等于3。

模型的袋外数据错分率是2.51%,我们画出表示树的数量和袋外数据错分率的关系图:

plot(rf.trained)#决策树数量和袋外数据分类误差的关系图

黑线表示全部袋外数据的错分率,绿线、红线分别表示袋外数据中malignant类别、benign类别的错分率。

从图中可以看到袋外数据错分率并不是在ntree=500时达到最小,而是150左右。

我们以此调整模型结构,重新训练模型。

√接下来调整随机森林中树的数量,重新训练:

调整决策树数量

ntrees.minerr <- which.min(rf.trained$err.rate[, 1])#袋外数据(“验证集”)分类误差最小时的决策树数量

ntrees.minerr#147棵

set.seed(12345678)

rf.trained.best <- randomForest(class ~ ., data = data.train, ntree=ntrees.minerr)#用147棵决策树构建随机森林

rf.trained.best#查看训练过程的信息

袋外数据错分率最小时的决策树数量是147棵,对应的错分率是2.09%。袋内和袋外数据中共有10条观测被错分,包括有7条实际为malignant的观测被错分为benign,3条实际为benign的观测被错分为malignant。

√最后评估调参后的随机森林模型的测试集预测效果:

测试集评价最优模型预测效果

predicted_probs.test <- predict(rf.trained.best, newdata = data.test,

type = "prob")[,2]#对测试集的结局预测,输出为malignant的概率

predicted_values.test <- predict(rf.trained.best, newdata = data.test,

type = "class")#测试集的结局预测,输出分类结果

查看预测效果

confusion_matrix <- table(Predicted = predicted_values.test, Actual = data.test$class)# 创建混淆矩阵

library(caret)

confusionMatrix(confusion_matrix)#输出模型预测准确率、灵敏度、特异度

√此外,还可以查看调参后的随机森林模型中自变量对分类贡献的重要性排序:

默认决策树算法是CART,所以衡量变量重要性的指标是基尼指数平均减少量。

在我们的模型中,分类贡献由大到小的自变量依次是:细胞形状均匀度(jyd.shape)、细胞大小均匀度(jyd.size)、裸细胞核(lxbh)、正常核仁(hr)、单上皮细胞大小(size.dsp)、平和染色质(rsz)、细胞浓度(nd)、边缘黏着度(nzd)、有丝分裂状态(ysfl)。

在实际中,我们也可以考虑用贡献度大的部分自变量来构建预测模型。

√优点:

1.预测表现稳定:通过集成多棵决策树的结果,随机森林的预测表现往往相对较优。

2.抗过拟合能力强:通过随机抽样和特征子集随机选择生成多棵不尽相同的决策树,降低了单一决策树容易过拟合的风险。

3.模型结果稳定:模型对异常值、噪声数据不敏感,模型效果不容易被小部分异常数据影响。

4.能够并行训练决策树:树和树之间不存在依赖关系,每棵树的训练过程是独立进行的,训练时间相比需要串行训练的同类模型短。

5.袋外数据评估模型效果:有放回随机重复抽样过程中,约有36.8%的样本始终不会被抽到用于训练模型,这部分袋外数据可以用来充当“验证集”评估模型效果,而不需单独划分验证集。

√缺点:

1.计算开销大:需要训练大量决策树,当数据量较大时训练时间较长。

2.模型解释性较差:决策过程相对不透明,不像单棵决策树那样能直观理解每个决策过程,不易于向不熟悉该算法的个体解释具体决策过程。

3.偏好于取值数目多的特征:如果构成随机森林的决策树是ID3或CART算法,可能会导致随机森林的效果过度依赖这些特征。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号