Ensemble Learning 之 Bagging 与 Random Forest
Bagging 全称是 Boostrap Aggregation,是除 Boosting 之外另一种集成学习的方式,之前在已经介绍过关与 Ensemble Learning 的内容与评价标准,其中“多样性”体现在应尽可能的增加基学习器的差别。Bagging 主要关注增大 “多样性”,他的做法是这样的,给定训练集 $D$ ,对 $D$ 进行 Bootstrap 采样,得到若干个不同的子集,Bootstrap 会确保各个子集有一定的交集,分别在各个子集上训练得到基分类器并且组合起来共同进行决策。
Bootstrap 与 Bagging
Bootstrap Sampling 是一种统计学上的抽样方法,该方法是这样执行的,对于有 $m$ 个样本的数据集 $D$,进行 $m$ 次有放回采样得到数据集 $D’$ ,明显 $D$ 与 $D’$ 大小相同,而且放回采样使得 $D’$ 中有的样本重复出现,有的样本则没有出现,简单估计一下,某个样本在 $m$ 次采样中始终没被采到的概率为 $(1- \frac{1}{m})^m$ ,取极限:
\[\lim_{m \rightarrow \infty}(1- \frac{1}{m})^m = \frac{1}{e} \approx 0.368\]
即 $D$ 中的样本大概有 63.2% 几率出现在 $D’$ 中,采样出 B 个 Bootstrap 样本集 $D_1 ,D_2 , …,D_B$ ,对这 B 个样本集分别训练一个基学习器 $T_b(x)$ ,结合这些基学习器共同作出决策。决策时,在分类任务中通常采用投票法,若两个类别票数一样,最简单的做法是随机选择一个;而回归任务则一般使用平均法。整个流程如下所示:

综上给出 Bagging 的的学习算法:
输入:训练集$D = \left\{ (x_i,y_i) \right \}_{i=1}^N $ 与参数 B
1. 采样得到 B 个 Bootstrap 训练集:$\left \{D_b \right \}_{b = 1}^B.$
2. $for$ $b = 1,2,…B$ $do$:
用 Bootstrap 训练集 $D_b$ 得到基学习器 $T_b(x)$;
3. 组合 B 个学习器得到最终模型 $T(x) = \sum_bT_b(x)$.
Bagging 较之 单学习器的效果会有很大提升,下图左为对 CART 进行 Bagging 后效果的提升,但是 Bagging 效果通常不如 Boosting ,下图右为两者的对比。

由于 Bagging 中各个基学习器独立进行,简直再适合并行不过了,而且速度非常快。
Random Forest
Random Forest 是建立在 Bagging 之上的概念,首先其做法类似于 Bagging ,通过 Bootstrap 采样得到 B 个不同的样本集,区别在于基学习器 Decision Tree 的建立,Random Forest 在训练基学习器的过程中进一步引入了随机属性选择,具体来说,假设当前待分裂节点有 $d$ 个特征,Bagging 中的决策树在分裂时会在所有 $d$ 个特征中选出一个最优特征用作划分特征;而 Random Forest 对于待分裂节点,先在 $d$ 个特征集集中随机选取包含 $k$ 个特征的子集,然后在这 $k$ 个子集中选择最优特征来划分数据集,这里参数 $k$ 控制了随机程度,若 $k = d$ ,则 Random Forest = Bagging ;若 $k=1$ 则代表随机选取一个属性进行划分,这时效果会很差;一般性况下,推荐选取 $k = log_2 d$ 。Random Forest 额示意图如下,其实看不出与 Bagging 的差别。

随机森林建模过程
1. 假设我们设定训练集中的样本个数为N ,然后通过 Bootstrap Sampling 来获得 N 个有重复的样本集,这样的抽样结果将作为我们生成决策树的训练集;
2. 对于有 d 个特征的数据集,每个节点都将随机选择 k (k<d) 个特定的变量,然后运用这 k 个变量来确定最佳的分裂点。在决策树的生成过程中,k 的值是保持不变的, 随机选取特征会增加树的独立性;
3. 每棵决策树都最大可能地进行生长而不进行剪枝;
4. 通过对所有的决策树进行加总来预测新的数据(在分类时采用多数投票,在回归时采用平均)。
随机森林的优点:
1. 正如上文所述,随机森林算法能解决分类与回归两种类型的问题,并在这两个方面都有相当好的估计表现;
2. 随机森林可以做类似于 GBDT 那样的特征组合;
3. 在对缺失数据进行估计时,随机森林是一个十分有效的方法;
4. 当存在分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法,比如对于 10:1 的数据,将多数数据分为 10份,做 10个 1:1 的单模型然后 Bagging 起来即可。
Random Forest 在许多任务上表现非常良好,而且易于实现、开销小,只对 Bagging 做了很小的改动,Bagging 中的“多样性”仅仅来自于对样本的扰动,而随机森林中加上了来自特征的扰动,正是由于这个改动,随机森林比 Bagging 拥有更小的泛化误差。而且使得基学习器更加“多样”。但 Random Forest 效果一般还是不如 Gradient Boosting ,如下图所示:

Bias and Variance 分析
从Bias 与 Variance 的角度来分析 Bagging 与 Boosting 的话,Bagging 是对样本重采样,对每一重采样得到的子样本集训练一个基学习器,最后取平均。由于子样本集的相似性以及使用的是同种学习器,因此各学习器有近似相等的 Bias 和 Variance(但学习器并不独立)。用 Bagging 组合 B 个模型,每个每个模型的损失用 $L_b$ 表示,所以Bagging 后的损失为所有学习器的均值: $\frac{1}{N}\sum_bL_b$ ,根据期望公式 $E[\bar{X}] = E[X]$ :
\[E( \frac{1}{N}\sum_bL_b) = E(L_b) ,b = 1,2,…,B\]
所以 Bagging 后的 Bias 和单个基学习器的接近,并不能显著降低bias,但是若各基学习器独立,根据 $Var(\bar{X}) = \frac{1}{N}Var(X)$ 则有:
\[Var( \frac{1}{N}\sum_bL_b) = \frac{1}{N}Var(L_b),b = 1,2,…,B\]
所以 Bagging 可以显著降低 Variance。实际上由于各个学习器并不是严格独立,所 Variance 的较少会小于 N 倍。
Boosting从优化角度来看,每一次迭代都比上一次更加精准,Adaboost 是从改变样本权值角度出发, Gradient Boosting 是从减小残差或者说从最大程度减小损失函数出发,所以 Boosting 主要还是靠降低 Bias 来提升预测精度。
综上, Boosting 降低 Bias ,Bagging 降低 Variance .
Ensemble Learning 之 Bagging 与 Random Forest的更多相关文章
- 2. 集成学习(Ensemble Learning)Bagging
1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...
- Bootstrap,Bagging and Random Forest Algorithm
Bootstrap Method:在统计学中,Bootstrap从原始数据中抽取子集,然后分别求取各个子集的统计特征,最终将统计特征合并.例如求取某国人民的平均身高,不可能测量每一个人的身高,但却可以 ...
- Aggregation(1):Blending、Bagging、Random Forest
假设我们有很多机器学习算法(可以是前面学过的任何一个),我们能不能同时使用它们来提高算法的性能?也即:三个臭皮匠赛过诸葛亮. 有这么几种aggregation的方式: 一些性能不太好的机器学习算法(弱 ...
- bagging,random forest,boosting(adaboost、GBDT),XGBoost小结
Bagging 从原始样本集中抽取训练集.每轮从原始样本集中使用Bootstraping(有放回)的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中).共进行 ...
- Bagging and Random Forest
Bagging和随机森林RF. 随机森林是最受欢迎和最强大的机器学习算法之一.它是一种称为Bootstrap Aggregation或bagging的集成机器学习算法. bootstrap是一种强大的 ...
- 3. 集成学习(Ensemble Learning)随机森林(Random Forest)
1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...
- 壁虎书7 Ensemble Learning and Random Forests
if you aggregate the predictions of a group of predictors,you will often get better predictions than ...
- 7. ensemble learning & AdaBoost
1. ensemble learning 集成学习 集成学习是通过构建并结合多个学习器来完成学习任务,如下图: 集成学习通过将多个学习学习器进行结合,常可以获得比单一学习器更优秀的泛化性能 从理论上来 ...
- 7. 集成学习(Ensemble Learning)Stacking
1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...
随机推荐
- Flatty Shadow在线为Icon图标生成长阴影效果。
Flatty Shadow在线为Icon图标生成长阴影效果. Flatty Shadow 彩蛋爆料直击现场 Flatty Shadow在线为Icon图标生成长阴影效果.
- AwSnap:让全版本(Windows、iOS、Android)Chrome浏览器崩溃的有趣漏洞
彩蛋爆料直击现场 几周前,我们曾报道了13个字符导致Chrome崩溃的漏洞.然而,这个漏洞有个小小的遗憾,那就是它只在MAC OS X下生效,其他系统并不受影响. 现在,我们又有了一个更有趣的漏洞.黑 ...
- Visual Studio 2015支持为Linux构建应用
点这里 微软著名的集成开发环境有可能是首次在其产品页提及了竞争对手Linux.Visual Studio 2015的页面声称,“Build for iOS, Android, Windows devi ...
- poj 3317 Stake Your Claim 极大极小搜索
思路:为了方便,当c1>c2时将0变为1,1变为0. 空格最多有10个,每个空格有3个状态,如果不状态压缩,会TLE的.所以最多有3^10种情况 代码如下: #include<iostre ...
- 540A: Combination Lock
题目链接:http://codeforces.com/problemset/problem/540/A 题意: 输入的两个长度一样的数,求对应位置的某位数到下一个数需要最小的步长,每次只能先前或先后走 ...
- Android应用的核心基础
Android4开发入门经典 之 第二部分:Android应用的核心基础 Android应用中的组件 Application Components Android应用中最主要的组件是: 1:Activ ...
- 一个tomcat上放多个webapp问题,那这多个webapp会不会竞争端口呢?不会!安全两码事
1.一个tomcat上放多个webapp问题,那这多个webapp会不会竞争端口呢?不会!安全两码事
- 研究CPU的好文章以及博客
留个爪,有空仔细看: http://blog.csdn.net/zhangxinrun/article/details/6918862 http://blog.csdn.net/gaijf/artic ...
- 在CentOS下面编译WizNote Qt Project
编译环境 CentOS 64位 Desktop 版本:6.5 编译前的准备: CentOS的用户默认没有root权限,如果当前用户没有权限root,则可以在终端里面执行下面的命令: su root s ...
- 处理11gR2 RAC集群资源状态异常INTERMEDIATE,CHECK TIMED OUT
注意节点6,7的磁盘CRSDG的状态明显不正常.oracle@ZJHZ-PS-CMREAD-SV-RPTDW06-DB-SD:~> crsctl status resource -t |less ...