《机器学习》学习笔记(二十二)—Ensemble(模型集成)

Ensemble:Bagging

1、偏置与方差的关系
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
除了可以很完美进行工作的机器学习模型,剩下的模型大致可以分为两种情况,即欠拟合(Underfitting)和过拟合(Overfitting)。欠拟合的特点在于它具有比较小的方差,但是却有着比较大的偏置(即与正确答案的偏离方向);而过拟合虽然有着较小的偏置,但是却有着较大的方差,将这两种情况画在一起如上图所示,随着模型复杂程度的增大,模型的效果会先提高后降低。

2、Bagging(Bootstrap aggregating)
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
利用可放回抽样总共获得N个样本,之后训练N个分类器,对于回归问题取这N个分类器的均值,对于分类问题让这N个分类器进行投票。

这种方法主要用在抑制模型过拟合的问题,比如说决策树。这种方法在NN上用的并不多,因为NN实际上没有想象中那么容易过拟合,它往往是在训练集上不能获得100% 的正确率的。

这是一个利用决策树进行分类的例子
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
将决策树化成图形的形式如上图所示,在形成一个决策树的过程中需要考虑一些参数,比如说分支数,分支的标准,终止准则,基本假设…

由决策树的性质我们很容易得到,树的深度越高,考虑的参数越多,效果也就越好

3、随机森林
随机森林是 bagging 的一个很好的例子
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
决策树很容易在训练集上获得0错误率的结果,因为如果一个叶子节点对应一个例子的话,很容易会得到这样的结果。这是就要对决策树采用 bagging 的方法,实际上也就是使用了随机森林的方法。在随机森林中仅仅进行重采样是不够的,因为仅仅使用重采样会使训练出的树之间很像;为了树之间更不像,还要决定哪些特性用于分类,哪些特性不用于分类。如上面的表格所示,第一个分类函数仅仅使用 x1,x2x^1,x^2 两个数据,后面的都是一样的,只是选择了一些数据,所以在使用验证集的时候可以直接使用那些没有用来训练的数据进行测试,比如说使用 f2+f4f2 +f4 组成随机森林,用数据x1进行检验,这种方法叫做 Out-of-bag,他看不在 bag 中的例子的表现如何,来判断现在模型的表现如何,这种方法的一个好处在于,它可以不用再事先切一个验证集出来,直接使用没有被用到的数据进行验证就好,随机森林的一个的实验结果如下图所示
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
这里总共使用了100个树构成的随机森林,从实验结果中可以看到,较为浅层的树仍然不能获得很好的效果,但是它可以使得结果更为平滑。

Ensemble: Boosting

Boosting 的目的在于提高弱分类器的性能,是一族可将弱学习器提升为强学习器的算法。

这族算法的工作机制类似:

《机器学习》学习笔记(二十二)—Ensemble(模型集成)
首先他会获得第一个分类器 f1(x)f_1(x),然后找到第二个分类器 f2(x)f_2(x) 来帮助第一个分类器 f1(x)f_1(x)。这个第二个分类器是什么样的机器学习算法都好,只要能够帮到 第一个分类器 f1(x)f_1(x) 提高整体的性能;然而如果 f1(x)f_1(x)f2(x)f_2(x) 是很相似的话,那么它们就没有办法帮助他很多,我们希望我们得到的 f2(x)f_2(x)f1(x)f_1(x) 是互补的。然后我们就得到了第二个分类器 f2(x)f_2(x) ,最后组合所有的分类器。然而这其中有很重要的是,分类器是需要按顺序学习的,不像之前的分类器是可以分开学习的。

1、获得不同的分类器
关键的思想在于获得不同的训练数据。重采样虽然可以获得不同的训练数据,但是每一个数据被采样的次数一定是整数,我们没有办法将一个数据采样2.1次或者0.1次。所以这个时候就要采用对数据重新赋权重的方法来获得不同的数据
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
假设原始的权重都是1,更新之后的权重为图中所示的数,那么损失函数也要进行同样的改变,在计算某一个数据的损失值之后还要乘以他的权重。

2、Adaboost
Adaboost的思想在于它使用令分类器 f1(x)f_1(x) 失败的数据进行训练得到 f2(x)f_2(x),之所以 f2(x)f_2(x) 所用的数据要使 f1(x)f_1(x) 失败,其主要原因是为了使 f1(x)f_1(x)f2(x)f_2(x) 互补 。那么如何找到这样的数据呢?

我们定义 f1(x)f_1(x) 在它的训练集上的误差为
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
分母 Z1Z_1 是所有权重的和,上标 n 代表这是第 n 个数据,下标代表这是使用在第几个弱分类器 f(x)f(x) ,其中的分类误差是小于0.5的。

而所谓的是原来的分类器在新的数据上失败的含义就是,原来的分类器在新的数据集(调整完权重的数据集)上的分类的正确率为50%,即
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
使 f1(x)f_1(x) 的效果在 f2(x)f_2(x) 所对应的新数据集上如同是在随机猜测一样。一个具体的例子如下图所示
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
假设原始数据的权重都是1,并且在这个权重下训练出了一个分类器 f1(x)f_1(x) ,这个时候计算分类误差就是0.25。之后我们需要修改训练数据的权重使得 f1(x)f_1(x) 失效(即分类正确率为0.5)。具体做法是将分类正确的数据的权重降低,而将分类错的权重增大,这就使得原来的分类器虽然分类还是正确的,但是经过了加权求和之后,原始分类器的就失效了(正确率只有0.5)。

所以训练数据的权重更新方法是这样的
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
其中
d1=(1ε1)/ε1d_1=\sqrt{(1-\varepsilon_1)/\varepsilon_1}
ε\varepsilon 是在这个分类函数上的误差

3、Adaboost 的算法流程
以二分类为例,Adaboost的算法流程如下图所示
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
给定一些训练数据,标签是+1和-1,初始的权重都是1 ,总共由 T 个弱分类器组成 Adaboost。首先使用权重为 utu_t 的数据训练出第 t 个分类器,这时 ϵtϵ_t 是用权重为 utu_t 的数据训练出第 t 个分类器的误差,之后计算 dtd_t。如果分类正确就除以常数 dtd_t,如果分类错误就乘以常数 dtd_t,以此来更新 ut+1u_{t+1}

在将得到的 N 个模型集成在一起的过程中,有以下两种方法
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
其中第一种方法“Uniform weight”是等权重地看待每一个的结果,这是一种比较不好的方法,更好的方法是将它们按照权重 αtαt 组合在一起,如上图“Non-niform weight”所示。这里使用 αtα_t 作为权重直觉上是合理的,因为 αtα_t 越大说明其所对应的弱分类器的错误率越小,也就是说分类效果越好,它就应该具有较大的权重。所以分类器的错误率越小,在最后投票的时候权重就越大。

举例:
假设有三个分类器
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
《机器学习》学习笔记(二十二)—Ensemble(模型集成)
然后将这三个分类器按照权重组合起来,如下图所示
《机器学习》学习笔记(二十二)—Ensemble(模型集成)