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 ...
随机推荐
- PHP timezone_abbreviations_list() 函数
------------恢复内容开始------------ 实例 输出 "act" 时区的夏令时.偏移量和时区名称: <?php$tzlist=timezone_abbre ...
- PHP diskfreespace() 函数
定义和用法 diskfreespace() 函数返回指定目录的可用空间,以字节为单位. 该函数是 disk_free_space() 函数的别名. 语法 diskfreespace(directory ...
- PHP sinh() 函数
实例 返回不同数的双曲正弦: <?phpecho(sinh(3) . "<br>");echo(sinh(-3) . "<br>" ...
- CF582D Number of Binominal Coefficients 库默尔定理 数位dp
LINK:Number of Binominal Coefficients 原来难题都长这样.. 水平有限只能推到一半. 设\(f(x)\)表示x中所含p的最大次数.即x质因数分解之后 p的指标. 容 ...
- log4j2 自动删除过期日志文件配置及实现原理解析
日志文件自动删除功能必不可少,当然你可以让运维去做这事,只是这不地道.而日志组件是一个必备组件,让其多做一件删除的工作,无可厚非.本文就来探讨下 log4j 的日志文件自动删除实现吧. 0. 自动删除 ...
- SparkSQL和hive on Spark
SparkSQL简介 SparkSQL的前身是Shark,给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,hive应运而生,它是当时唯一运行在Hadoop上的SQL-on-h ...
- 构建自己的js库
一.背景 web前端开发人员经常会用到一些现成的js库(框架).框架的使用增加了代码的模块化和可复用性,最主要的是屏蔽了浏览器之间差异性的实现,使得代码更加简洁,框架使用者只需要将注意力放在业务的实现 ...
- 我的强迫症系列之@Builder和建造者模式
前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...
- ORACLE常用语句:
ORACLE常用语句: 1.首先,创建(新)用户: create user username identified by password; username:新用户名的用户名 password: 新 ...
- myBatis源码解析-数据源篇(3)
前言:我们使用mybatis时,关于数据源的配置多使用如c3p0,druid等第三方的数据源.其实mybatis内置了数据源的实现,提供了连接数据库,池的功能.在分析了缓存和日志包的源码后,接下来分析 ...