Bagging与随机森林(RF)算法原理总结
Bagging与随机森林算法原理总结
在集成学习原理小结中,我们学习到了两个流派,一个是Boosting,它的特点是各个弱学习器之间存在依赖和关系,另一个是Bagging,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合,本文就对集成学习中的Bagging和随机森林做一个总结。
随机森林是集成学习中可以和GBDT相较衡的算法,尤其是它可以很方便地进行并行训练,在现在的大数据大样本下很有诱惑力。
1.Bagging的原理
在集成学习原理总结的Bagging原理这一块,我们画了这么一张流程图
从上图可以看出,Bagging的弱学习器之间没有像Boosting的弱学习器之间存在很强的联系,他的特点在“随机采样”,下面来介绍一下随机采样原理。
随机采样(bootsrap)就是从我们的训练集里面采集固定样本个数的样本,但是每一次采集过后,都会将采集到的样本重新放回。也就说,这一次采集到的样本,下一次人仍有可能会继续被采集到。对于我们的Bagging系列算法,一般会随机采集和训练样本数m一样个数的样本。这样得到的采样集和训练集样本个数相同,但是样本内容不同。如果我们对有m个样本训练集做T次的随机采样,则由于随机性,T个采样集各不相同。
注意到这和GBDT的子采样是不同的,GBDT的子采样是无放回采样,而Bagging的子采样是有有放回采样。

对于这36.8%的没有被采集到的数据,我们称之为袋外数据(Out of bag,简称oog)。这些数据没有参与训练模型的拟合,因此可以检验模型泛化能力。
Bagging对弱学习器没有限制,这和adaboost一样,但是最常用的同样也是决策树和随机森林。
Bagging的集合策略也比较简单,对于分类问题,采用简单投票法,得到票别数最多的那一类作为输出样本的预测类别。对于回归问题,采用简单平均法,对T个弱学习器得到的回归结果进行算数平均得到最终模型输出。
由于Bagging每次训练都进行采样来训练模型,所以模型的泛化能力很强,对于降低模型的方差很有作用。当然对于训练基地额拟合误差就会大一点,也就输模型偏倚会大一些。
2.Bagging算法流程
上一节我们对bagging算法的原理做了总结,这里就对bagging算法的流程做一个总结。相对于Boosting系列的Adaboost和GBDT,bagging算法要简单的多。

输出为最终的强分类器f(X)
1)对于t = 1,2,3,...,T:

- 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
3.随机森林算法
理解了bagging,随机森林(Random Forest 一下简称RF)就好理解了。它是Bagging算法的进化版,也就是说,它的思想仍然是bagging,但是进行了独有的改进。改进如下:
首先,RF使用了CART决策树作为弱学习器,这让我们想到了梯度提升树GBDT。
第二,在梯度提升树的基础上,RF对决策树的建立做了改进,我们会在节点上所有的n个样本特征中选择一个最优的特征来做决策树的左右子树划分,但是RF通过随机选择节点上的而一部分样本特征,这个数字小于n,假设为α,然后在这些随机选择的α个样本特征中,选择一个最优的特征来做进行决策树的左右子树划分,进一步提高了决策树的泛化能力。
说明:如果α = n时,则此时的RF的CART决策树和普通的CART决策树没有什么区别。α值越小,则模型越壮硕,当然此时对于训练集的拟合程度会变差。也就是说α越小,模型的方差会减小(即在测试集上的泛化误差减少),但是偏倚(偏差)会增大。在实际案例中,一般会通过交叉验证调参获取一个合适的m的值。
除了以上两点,RF与普通的bagging算法没有什么差别,下面来总结RF的算法流程:

2)如果时分类算法预测,则T个学习器投出最多票数的类别或者时类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
4.随机森林小结
作为一个可以高度并行并优化的算法,RF在大数据时代大有作为,这里对RF的主要优缺点做一个小小的总结 。
RF的主要优点是:
1)训练可以高度并行化,对于大数据大样本时代训练速度有优势。
2)由于随机选择决策树节点划分特征,这样在样本特征纬度很高的情况下,仍然能够高效率训练模型。
3)在训练后可以输出各个特征对于输出的重要性。
4)由于采取了随机采样,模型的泛化能力强,方差小。
5)相比于Boosting系列的GBDT和Adaboost,RF实现比较简单。
6)对于部分特征确实并不敏感。(这个不太懂!)
RF的主要缺点是:
1)在某些噪音比较大的样本,RF容易陷入过拟合。
2)取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。
5.参考资料
刘建平老师博客:
Bagging与随机森林原理小结
Bagging与随机森林(RF)算法原理总结的更多相关文章
- Bagging与随机森林算法原理小结
在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...
- 机器学习 —— 决策树及其集成算法(Bagging、随机森林、Boosting)
本文为senlie原创,转载请保留此地址:http://www.cnblogs.com/senlie/ 决策树--------------------------------------------- ...
- sklearn_随机森林random forest原理_乳腺癌分类器建模(推荐AAA)
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- 机器学习总结(二)bagging与随机森林
一:Bagging与随机森林 与Boosting族算法不同的是,Bagging和随机森林的个体学习器之间不存在强的依赖关系,可同时生成并行化的方法. Bagging算法 bagging的算法过程如下: ...
- 机器学习回顾篇(12):集成学习之Bagging与随机森林
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- 随机森林RF、XGBoost、GBDT和LightGBM的原理和区别
目录 1.基本知识点介绍 2.各个算法原理 2.1 随机森林 -- RandomForest 2.2 XGBoost算法 2.3 GBDT算法(Gradient Boosting Decision T ...
- 机器学习——Bagging与随机森林算法及其变种
Bagging算法: 凡解:给定M个数据集,有放回的随机抽取M个数据,假设如此抽取3组,3组数据一定是有重复的,所以先去重.去重后得到3组数据,每组数据量分别是s1,s2,s3,然后三组分别训练组合 ...
- 04-10 Bagging和随机森林
目录 Bagging算法和随机森林 一.Bagging算法和随机森林学习目标 二.Bagging算法原理回顾 三.Bagging算法流程 3.1 输入 3.2 输出 3.3 流程 四.随机森林详解 4 ...
- Bagging之随机森林
随机森林(Random Forest)是一种Bagging(Bootstrap Aggregating)集成算法,在样本随机(样本扰动)的基础上,进一步运用特征随机(属性扰动)的机制,得到比一般的Ba ...
随机推荐
- IDEA中搭建项目环境
ladies and gentlemen,Welcome to my blog! 本文主要在IDEA中搭建项目环境. 有问题和指正,欢迎下方留言~ 1. 使用GitLab将项目下载下来 1.1 选 ...
- 如何在sed中使用变量,两种方法
第一 在sed条件中是不认识变量取值的 sed '/$x/d' test 所以要想它能够识别变量 sed "/$x/d/" test 方法简单就是把"单引号"变 ...
- Docker CMD exec-form用于多个命令执行
这是一个通过shell形式的CMD指令运行多个命令的愚蠢示例.我更喜欢使用exec-form,但我不知道如何连接指令. 壳的形式: CMD mkdir -p ~/my/new/directory/ \ ...
- VSCode package.json warning: Problems loading reference 'https://json.schemastore.org/package'...
报错内容 Problems loading reference 'https://json.schemastore.org/package': Unable to load schema from ' ...
- PHP array_key_exists() 函数
实例 检查键名 "Volvo" 是否存在于数组中: <?php $a=array("Volvo"=>"XC90","B ...
- PHP flock() 函数
定义和用法 flock() 函数锁定或释放文件. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 flock(file,lock,block) 参数 描述 file 必需.规定要 ...
- PHP hebrev() 函数
实例 反向显示希伯来字符: <?phpecho hebrev("á çùåï äúùñâ");?>高佣联盟 www.cgewang.com 定义和用法 hebrev() ...
- 初学编程丨从零开始学习编程的基本路线,BAT程序员亲手总结!
编程并不是说代码怎么写,框架怎么用,业务怎么转换为代码逻辑,这些都不是编程的要素(但却是工作的刚需......).我认为按照下面这个路线来学习编程,会使自己在学习的路途上少去很多问题(比如为啥会有多线 ...
- luogu P3412 仓鼠找sugar II 期望 树形dp
LINK:仓鼠找sugar II 以前做过类似的期望题目 加上最后的树形dp不算太难 还是可以推出来的. 容易发现 当固定起点和终点的时候 可以先固定根 这样就不用分到底是正着走还是倒着走了. 1为根 ...
- luogu P3223 [HNOI2012]排队
LINK:排队\ 原谅我没学过组合数学 没有高中数学基础水平... 不过凭着隔板法的应用还是可以推出来的. 首先考虑女生 发现一个排列数m! 两个女生不能相邻 那么理论上来说存在无解的情况 而这道题好 ...