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. CSS Ruler 前端工具

    CSS Ruler是一款在线的CSS单位工具. CSS Ruler 彩蛋爆料直击现场 http://katydecorah.com/css-ruler/

  2. Java package详解

    Java引入包(package)机制,提供了类的多层命名空间,用于解决类的命名冲突.类文件管理等问题.Java允许将一组功能相关的类放在同一个package下,从而组成逻辑上的类库单元.如果希望把一个 ...

  3. HDU 1385 Minimum Transport Cost (Dijstra 最短路)

    Minimum Transport Cost http://acm.hdu.edu.cn/showproblem.php?pid=1385 Problem Description These are ...

  4. DevExpress licenses.licx 问题

    在DevExpress ( 当然并不范指DevExpress,很多收费软件都是这样的)中,licenses.licx 是用户许可证书文件,当我们使用某些ActiveX(是Microsoft对于一系列策 ...

  5. 饶有兴致的用javascript做了个贪食蛇游戏

    09年写的东西.一直藏在自己的记事本里头,现在开始整理写博客,所以直接搬过来 先上效果图 再添代码: <HTML> <HEAD> <TITLE>贪吃蛇 Snake ...

  6. 2014多校第七场1005 || HDU 4939 Stupid Tower Defense (DP)

    题目链接 题意 :长度n单位,从头走到尾,经过每个单位长度需要花费t秒,有三种塔: 红塔 :经过该塔所在单位时,每秒会受到x点伤害. 绿塔 : 经过该塔所在单位之后的每个单位长度时每秒都会经受y点伤害 ...

  7. poj 2975 Nim 博弈论

    令ans=a1^a2^...^an,如果需要构造出异或值为0的数, 而且由于只能操作一堆石子,所以对于某堆石子ai,现在对于ans^ai,就是除了ai以外其他的石子 的异或值,如果ans^ai< ...

  8. JavaScript基础之函数与数组

     函数    函数的基本概念 为完成某一功能的程序指令(语句)的集合,称为函数.有的程序员把函数称为方法,希望大家不要被这两个名词搞晕了. 函数分为:自定义函数.系统函数(经常查看js帮助手册). j ...

  9. lintcode:被围绕的区域

    被围绕的区域 给一个二维的矩阵,包含 'X' 和 'O', 找到所有被 'X' 围绕的区域,并用 'X' 填充满. 样例 给出二维矩阵: X X X X X O O X X X O X X O X X ...

  10. Hadoop基础教程之HelloWord

    上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello Word. OK,我们先来看一下当时在命令行里输入的内容: ...