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 ...
随机推荐
- 自定义bind
Function.prototype.mybind = function (context, ...args1) { // 判断是否为函数 if (typeof this !== 'function' ...
- form-create 组件生成规则说明
本文介绍form-create生成规则与组件的关系 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue 组件.结合内置1 ...
- 数据结构C语言实现----图
邻接表储存结构 /*邻接表的边*/ typedef struct ArcNode { int adjvex; struct ArcNode *next; }ArcNode; /*邻接表的结点*/ ty ...
- Django学习路14_获取数据库中用户名字并展示,获取指定条数
在 views.py 中添加 获取函数 注:此时获取的是全部用户的信息 def get_users(request): users = User.objects.all() context = { ' ...
- PHP atan() 函数
实例 通过 atan() 函数返回不同数的反正切: <?phpecho(atan(0.50) . "<br>");echo(atan(-0.50) . " ...
- PHP xml_set_element_handler() 函数
定义和用法 xml_set_element_handler() 函数规定在 XML 文档中元素的起始和终止调用的函数. 如果成功,该函数则返回 TRUE.如果失败,则返回 FALSE.高佣联盟 www ...
- PHP strip_whitespace() 函数
实例 返回已删除 PHP 注释以及空白字符的 "test.php" 文件的源代码: <?php// PHP comment /** Another PHP comment*/ ...
- 找回 Virtuoso 中的缩放和角度
https://www.cnblogs.com/yeungchie/ 打开要缩放的版图 CIW 中运行:dbCreateXformPCell(geGetEditCellView() geGetEdit ...
- QT学习笔记(day01)
QT中的对象树 一定程度上简化了内存回收机制:当创建的对象 指定的父亲是由QObject或者Object派生的类时候,这个对象被加载到对象树上,当窗口关闭掉时候,树上的对象也都会被释放掉 信号和槽 通 ...
- 笨办法学习Python3练习代码1-10
ex1.py print("hello world!",end = " ")#不换行 print("hello again") print( ...