摘要:随机森林是集成算法最前沿的代表之一。随机森林是 Bagging 的升级,它和 Bagging 的主要区别在于引入了随机特征选择。
本文分享自华为云社区《集成学习中的随机森林》,原文作者:chengxiaoli。
随机森林是集成算法最前沿的代表之一。随机森林是 Bagging 的升级,它和 Bagging 的主要区别在于引入了随机特征选择。即:在每棵决策树选择分割点时,随机森林会先随机选择一个特征子集,然后在这个子集上进行传统的分割点选择。
随机森林
随机森林的构造过程:假如有 N 个样本,则有放回的随机选择 N 个样本(每次随机选择一个样本,然后返回继续选择)。这选择好了的 N 个样本用来训练一个决策树,作为决策树根节点处的样本。
当每个样本有 M 个属性时,在决策树的每个节点需要分裂时,随机从这 M 个属性中选取出 m 个属性,满足条件 m<< M。然后从这 m 个属性中采用某种策略(比如说信息增益)来选择 1 个属性作为该节点的分裂属性。
决策树形成过程中每个节点都要按照上面步骤来分裂(很容易理解,如果下一次该节点选出来的那一个属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,无须继续分裂了)。一直到不能够再分裂为止。注意整个决策树形成过程中没有进行剪枝。
按照上述步骤建立大量的决策树,这样就构成了随机森林了。在建立每一棵决策树的过程中,有两点需要注意采样与完全分裂。
首先是两个随机采样的过程,randomforest 对输入的数据要进行行、列的采样。对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。假设输入样本为 N 个,那么采样的样本也为 N 个。这样使得在训练的时候,每一棵树的输入样本都不是全部的样本,使得相对不容易出现 over-fitting。然后进行列采样,从 M 个 feature 中,选择 m 个(m<< M)。
之后就是对采样之后的数据使用完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一个分类。一般很多的决策树算法都一个重要的步骤——剪枝,但是这里不这样干,由于之前的两个随机采样的过程保证了随机性,所以就算不剪枝,也不会出现 over-fitting。
输入:数据集 D={(x1,y1),(x2,y2),…,(xm,ym)};
特征子集大小 K。
步骤:
1. Nß给定数据集 D 构建节点;
2. If 所有样本属于一个类别 thenreturn N;
3. Fß可以继续分类的特征集合;
4. If F 为空 thenreturn N;
5. Fiß从 F 中随机选择 K 个特征;
6. N.fß特征 Fi 中具有最好分割点的特征;
7. N.pßf 中最好的分割点;
8. DlßD 中 N.f 值小于 N.p 的样本子集;
9. DrßD 中 N.f 值不小于 N.p 的样本子集;
10. Nlß以参数(Dl,K)继续调用本程序;
11. Nrß以参数(Dr,K)继续调用本程序;
12. Return N.
输出:一棵随机决策树。
随机森林和 Bagging
以上是随机森林中使用的随机决策树算法。参数 K 用来控制随机性。当 K 等于所有特征总数时,构建的决策树等价于传统确定性的决策树;当 K=1 时,会随机选择一个特征;建议 K 值为特征数的对数。随机树只在特征选择阶段引入随机性,在选择分割点时不会引入。
图 a:Bagging 的 10 个基学习器;图 b:随机森林的 10 个基学习器;图 c:Bagging;图 d:随机森林。
随机森林和 Bagging 在 40 个 UCI 数据集上预测错误的对比。每个点为一个数据集,点的坐标为两个对比算法的预测误差。对角线标出两个对比算法相同预测误差的位置。
比较了随机森林,Bagging 和它们基分类器的决策边界。由图可见随机森林和它的基学习器的决策边界比较灵活,因而具有更好的泛化能力。在高斯数据集上,随机森林的测试错误率为 7.85%,而 Bagging 为 8.3%。以上图中比较了随机森林和 Bagging 在 40 个 UCI 数据集上的预测错误。很明显,无论使用剪枝还是未剪枝的决策树,随机森林的预测精度都优于 Bagging 的结果。
集成规模在 2 个 UCI 数据集上对随机森林和 Bagging 的影响。
随机森林的收敛性和 Bagging 相似。随机森林的起始点一般较差,特别是当集成规模为 1 时,随机特征选择会导致决策树性能退化;但是,它通常可以收敛到很低的测试误差。在训练的阶段,随机森林的收敛比 Bagging 更快速。这是因为,在决策树的构建阶段,Bagging 使用的全量的特征进行分割选择,进而生成确定性的决策树,而随机森林仅需要使用随机选择的特征来生成随机决策树。
总结:
组合分类器比单一分类器的分类效果好,随机森林(randomforest)是一种利用多个分类树对数据进行判别与分类的方法,它在对数据进行分类的同时,还可以给出各个变量(基因)的重要性评分,评估各个变量在分类中所起的作用。
[1] 陈雷.深度学习与 MindSpore 实践[M].清华大学出版社:2020.
[2] 诸葛越,葫芦娃.百面机器学习[M].人民邮电出版社:2020.
[3] 周志华.机器学习[M].清华大学出版社:2016.