摘要:随机森林是集成算法最前沿的代表之一。随机森林是Bagging的升级,它和Bagging的主要区别在于引入了随机特征选择。

本文分享自华为云社区《集成学习中的随机森林》,原文作者:chengxiaoli。

随机森林是集成算法最前沿的代表之一。随机森林是Bagging的升级,它和Bagging的主要区别在于引入了随机特征选择。即:在每棵决策树选择分割点时,随机森林会先随机选择一个特征子集,然后在这个子集上进行传统的分割点选择。

随机森林

随机森林的构造过程:假如有N个样本,则有放回的随机选择N个样本(每次随机选择一个样本,然后返回继续选择)。这选择好了的N个样本用来训练一个决策树,作为决策树根节点处的样本。

当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,满足条件m << M。然后从这m个属性中采用某种策略(比如说信息增益)来选择1个属性作为该节点的分裂属性。

决策树形成过程中每个节点都要按照上面步骤来分裂(很容易理解,如果下一次该节点选出来的那一个属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,无须继续分裂了)。一直到不能够再分裂为止。注意整个决策树形成过程中没有进行剪枝。

按照上述步骤建立大量的决策树,这样就构成了随机森林了。在建立每一棵决策树的过程中,有两点需要注意采样与完全分裂。

首先是两个随机采样的过程,random forest对输入的数据要进行行、列的采样。对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。假设输入样本为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使用的全量的特征进行分割选择,进而生成确定性的决策树,而随机森林仅需要使用随机选择的特征来生成随机决策树。

总结:

组合分类器比单一分类器的分类效果好,随机森林(random forest)是一种利用多个分类树对数据进行判别与分类的方法,它在对数据进行分类的同时,还可以给出各个变量(基因)的重要性评分,评估各个变量在分类中所起的作用。

[1] 陈雷.深度学习与MindSpore实践[M].清华大学出版社:2020.

[2] 诸葛越,葫芦娃.百面机器学习[M].人民邮电出版社:2020.

[3] 周志华.机器学习[M].清华大学出版社:2016.

点击关注,第一时间了解华为云新鲜技术~

集成学习中的随机森林相关推荐

  1. 集成学习——BAGGING和随机森林

    集成学习--BAGGING和随机森林 集成学习--BAGGING和随机森林 1.什么是集成学习 2.怎样进行集成学习 3.Bagging方法 4.Bagging方法训练.预测过程 5.Bagging方 ...

  2. 【进阶版】机器学习之集成学习介绍、随机森林模型经验贴(12)

    目录 欢迎订阅本专栏,持续更新中~ 本专栏前期文章介绍! 机器学习配套资源推送 进阶版机器学习文章更新~ 点击下方下载高清版学习知识图册 集成学习 个体与集成 Boosting Bagging与Ran ...

  3. 【机器学习】集成学习ensemble之随机森林

    Bootstrapping Bootstrapping从字面意思翻译是拔靴法,从其内容翻译又叫自助法,是一种再抽样的统计方法.自助法的名称来源于英文短语"to pull oneself up ...

  4. 图解集成学习中的梯度提升思想

    摘要: 本文讲述集成学习中的梯度提升方法的思想,以简单算术及图片的形式展示整个过程,一看就懂! 简介 机器学习(ML)中的一个关键步骤是选择适合数据的最佳算法,根据数据中的一些统计数据和可视化信息,机 ...

  5. (七)集成学习中-投票法Voting

    集成学习第一法宝:投票! 参考:DataWhale教程链接 集成学习(上)所有Task: (一)集成学习上--机器学习三大任务 (二)集成学习上--回归模型 (三)集成学习上--偏差与方差 (四)集成 ...

  6. 在jupytor中运行随机森林预测泰坦尼克旅客生存情况

    在jupytor中运行随机森林预测泰坦尼克旅客生存情况 数据集链接链接: link. 百度网盘:链接: https://pan.baidu.com/s/1_pQ-3iG4dr0hrvU_5hYUtg ...

  7. 集成学习中boosting、bagging、随机森林算法的介绍

    集成学习的概念 定义:集成学习通过构建并结合多个学习器来完成学习任务. 分类:只包含同种类型的个体学习器,这样的集成是"同质"的,例如都是神经网络或者决策树:包含不同类型的个体学习 ...

  8. 【机器学习实战】利用sklearn中的随机森林对红酒数据集进行分类预测

    1. sklearn中的集成算法 sklearn中的集成算法模块ensemble 2.预测代码及结果 %matplotlib inline from sklearn.tree import Decis ...

  9. 集成学习中的Boosting和Bagging

    集成学习是一大类模型融合策略和方法的统称,其中包含多种集成学习的思想. Boosting Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖. 它的基本思路是将基分类器层层叠加, ...

最新文章

  1. 【组合数学】递推方程 ( 无重根递推方程求解实例 | 无重根下递推方程求解完整过程 )
  2. 项目后台的最新认识和对MVC封装性、可维护性的更深刻认识!
  3. C#中Invoke的用法(转)
  4. 教你分分钟使用Retrofit+Rxjava实现网络请求
  5. 仓库温度湿度控制措施_药品仓库如何保持温湿度均衡?
  6. hibernate 复合主键 根据主键删除_Python 之 MySql“未解之谜”11--主键 id 那些事
  7. 都2021年了,还不会使用GitHub创建、推送、拉取、克隆远程库、团队协作开发?
  8. python-万能函数装饰器
  9. duplicate symbols for architecture arm64的问题结决方法
  10. think-cell 数据表无法打开怎么办
  11. 如何将图片批量转换成PDF
  12. 青柠开车Spring Cloud(七) —— 断路器 Hystrix
  13. 计算机基础——计算机网络
  14. 爬虫-使用代理ip,使用session
  15. excle报盘之导入报盘
  16. 线性回归(公式推导,Numpy、sklearn实现)
  17. DOM中的node(节点)有关的三个属性--nodeType、nodeName、nodeValue
  18. Appium的实现原理
  19. 【20保研】哈尔滨工业大学2020年研究生系列宣讲会正式启动!
  20. python内网穿透 开源_内网穿透神器-Serveo

热门文章

  1. Bootstrap列表组堆叠
  2. RTP协议解析和H264码流提取
  3. python matplotlib 画一条水平直线遇到的问题
  4. Eigen 矩阵计算工具
  5. Git笔记(19) 生成SSH公钥
  6. java编写猫抓老鼠程序_Java抓鱼程序
  7. c语言继承与派生作用,C++中继承与派生是如何实现的?
  8. boot空间不足 linux,linux——boot空间不足
  9. EOS源码分析:transaction的一生
  10. 使用ZeroTier搭建大局域网利用VNC远程桌面