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的更多相关文章

  1. 2. 集成学习(Ensemble Learning)Bagging

    1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...

  2. Bootstrap,Bagging and Random Forest Algorithm

    Bootstrap Method:在统计学中,Bootstrap从原始数据中抽取子集,然后分别求取各个子集的统计特征,最终将统计特征合并.例如求取某国人民的平均身高,不可能测量每一个人的身高,但却可以 ...

  3. Aggregation(1):Blending、Bagging、Random Forest

    假设我们有很多机器学习算法(可以是前面学过的任何一个),我们能不能同时使用它们来提高算法的性能?也即:三个臭皮匠赛过诸葛亮. 有这么几种aggregation的方式: 一些性能不太好的机器学习算法(弱 ...

  4. bagging,random forest,boosting(adaboost、GBDT),XGBoost小结

    Bagging 从原始样本集中抽取训练集.每轮从原始样本集中使用Bootstraping(有放回)的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中).共进行 ...

  5. Bagging and Random Forest

    Bagging和随机森林RF. 随机森林是最受欢迎和最强大的机器学习算法之一.它是一种称为Bootstrap Aggregation或bagging的集成机器学习算法. bootstrap是一种强大的 ...

  6. 3. 集成学习(Ensemble Learning)随机森林(Random Forest)

    1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...

  7. 壁虎书7 Ensemble Learning and Random Forests

    if you aggregate the predictions of a group of predictors,you will often get better predictions than ...

  8. 7. ensemble learning & AdaBoost

    1. ensemble learning 集成学习 集成学习是通过构建并结合多个学习器来完成学习任务,如下图: 集成学习通过将多个学习学习器进行结合,常可以获得比单一学习器更优秀的泛化性能 从理论上来 ...

  9. 7. 集成学习(Ensemble Learning)Stacking

    1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...

随机推荐

  1. Flatty Shadow在线为Icon图标生成长阴影效果。

    Flatty Shadow在线为Icon图标生成长阴影效果. Flatty Shadow 彩蛋爆料直击现场 Flatty Shadow在线为Icon图标生成长阴影效果.

  2. AwSnap:让全版本(Windows、iOS、Android)Chrome浏览器崩溃的有趣漏洞

    彩蛋爆料直击现场 几周前,我们曾报道了13个字符导致Chrome崩溃的漏洞.然而,这个漏洞有个小小的遗憾,那就是它只在MAC OS X下生效,其他系统并不受影响. 现在,我们又有了一个更有趣的漏洞.黑 ...

  3. Visual Studio 2015支持为Linux构建应用

    点这里 微软著名的集成开发环境有可能是首次在其产品页提及了竞争对手Linux.Visual Studio 2015的页面声称,“Build for iOS, Android, Windows devi ...

  4. poj 3317 Stake Your Claim 极大极小搜索

    思路:为了方便,当c1>c2时将0变为1,1变为0. 空格最多有10个,每个空格有3个状态,如果不状态压缩,会TLE的.所以最多有3^10种情况 代码如下: #include<iostre ...

  5. 540A: Combination Lock

    题目链接:http://codeforces.com/problemset/problem/540/A 题意: 输入的两个长度一样的数,求对应位置的某位数到下一个数需要最小的步长,每次只能先前或先后走 ...

  6. Android应用的核心基础

    Android4开发入门经典 之 第二部分:Android应用的核心基础 Android应用中的组件 Application Components Android应用中最主要的组件是: 1:Activ ...

  7. 一个tomcat上放多个webapp问题,那这多个webapp会不会竞争端口呢?不会!安全两码事

    1.一个tomcat上放多个webapp问题,那这多个webapp会不会竞争端口呢?不会!安全两码事

  8. 研究CPU的好文章以及博客

    留个爪,有空仔细看: http://blog.csdn.net/zhangxinrun/article/details/6918862 http://blog.csdn.net/gaijf/artic ...

  9. 在CentOS下面编译WizNote Qt Project

    编译环境 CentOS 64位 Desktop 版本:6.5 编译前的准备: CentOS的用户默认没有root权限,如果当前用户没有权限root,则可以在终端里面执行下面的命令: su root s ...

  10. 处理11gR2 RAC集群资源状态异常INTERMEDIATE,CHECK TIMED OUT

    注意节点6,7的磁盘CRSDG的状态明显不正常.oracle@ZJHZ-PS-CMREAD-SV-RPTDW06-DB-SD:~> crsctl status resource -t |less ...