根据维基百科的说法:在统计学和机器学习中,集成学习方法使用多种学习算法来获得比单独使用任何单独的学习算法更好的预测性能。
具体说来,就是对于训练集数据,我们通过训练若干个个体学习器(弱学习器),通过一定的结合策略,就可以最终形成一个强学习器,以达到博采众长的目的。
不难看出,对集成学习来说,最重要的部分有两个:
以何种方式训练多个个体学习器
以何种方式将训练好的学习器结合起来
Boosting 也就是所谓的提升方法,多数提升方法是首先改变训练数据的概率分布(或者权值),针对不同的训练数据分布调用弱学习算法学习多个弱分类器,然后采用加权多数表决(即加大误差小的弱分类器的权值,减小误差大的弱分类器的权值)的方法将各弱学习器结合在一起。
(2) 有放回采样得到的训练集之间是相互独立的,这就使得个体学习器尽可能相互独立。
(3) 各个基学习器的训练过程独立,因此可以并行化。
- Boosting
(1) 由于各个基学习器的训练是序列化进行的,且后一个基学习器重点关注前一个基学习器上表现不好的样本,因此产生的各个基学习器相对互补,因此可以减少偏差。
- 两者比较
1)样本选择:
Bagging:训练集是有放回选取的,从原始集中选出的各轮训练集之间是独立的。 Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整
2)样例权重:
Bagging:使用均匀取样,每个样例的权重相等 Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大
3)预测函数:
Bagging:所有预测函数的权重相等。 Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重
4)并行计算:
Bagging:各个预测函数可以并行生成 Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果
5)优化部分:
Bagging:主要减小模型的方差(Variance) Boosting:主要减小模型的偏差(Bias)
假设各基分类器在集成分类器中所占的权重,各基分类器的方差为,均值为,基分类器两两之间的相关性为。基分类器个数为。
对于 Bagging 来说,,由于各基分类器使用相同算法在独立的数据集上进行训练得到,因此可以近似认为且,,且基分类器两两之间相关系数近似相等:。
从而:
根据上式我们可以看到,整体模型的期望近似于基模型的期望,这也就意味着整体模型的偏差和基模型的偏差近似。同时,整体模型的方差小于等于基模型的方差(当相关性为1时取等号),随着基模型数的增多,上式中第一项减小,从而整体模型的方差减少,从而防止过拟合的能力增强,模型的准确度得到提高。
因此 Bagging 就是在几乎不改变模型准确性的前提下尽可能减小模型的方差。因此 Bagging 中的基模型一定要为强模型,否则就会导致整体模型的偏差大,即准确度低。
Random Forest 是典型的基于 Bagging 框架的模型,其基模型是拟合能力很强的决策树。Random Fores 在树的内部节点分裂过程中,不是将所有特征,而是随机抽样一部分特征纳入分裂的候选项。这样一来,基模型之间的相关性降低,从而在方差公式中,第一项增加,第二项减小,整体方差进一步减小。
对于 Boosting 来说,基模型的训练集抽样是强相关的,那么模型的相关系数近似等于1,即,从而:
根据上式我们可以看到,整体模型的方差近似于基模型的方差,而期望则可以根据各基学习器权重的分配进行优化(误分率低的权重大)。
因此 Boosting 就是在几乎不改变模型方差的前提下减小模型的偏差。故 Boosting 中的基模型一定要为弱模型,否则就会导致整体模型的方差大(强模型容易过拟合,导致方差过大)。
AdaBoost,即 Adaptive Boosting (自适应提升)的简称,它的思想是通过序列化地训练多个弱分类器并将它们进行线性组合得到一个强分类器。具体来说,每次训练一个弱分类时都根据前一个分类器的结果来对样本权值进行更新,增加误分类样本的权值,降低正确分类样本的权值;将各分类器进行线性组合的时候,其权重与其误分类率成反比,误分类率越小的弱分类器其权重越大。
AdaBoost 本质上是模型为加法模型,损失函数为指数函数,学习算法为前向分步算法时的二分类学习方法。
首先,加法模型就是指最终的集成分类器由各个基分类器线性组合构成:
是基函数,是基函数的参数,为基函数的系数。
给定训练数据及损失函数的条件下,学习加法模型成为经验风险最小化问题:
这是一个复杂的优化问题。前向分步算法的想法是,每一步只学习一个基函数及其系数,逐步逼近优化目标,就可以简化复杂度,即极小化损失函数:
现假设损失函数为指数函数:
并假设经过轮已经得到,则现在的优化目标是:
记,此项与无关。而在时为,在在时为,因此可以写成:
将带入上式后求解:
求导令其为 0 解得:
这里即为分类误差率。
这样我们就得到了 AdaBoost 的基函数系数计算公式。
下面我们来看权值的更新:
由:
得到:
添加一个规范化因子即得到 AdaBoost 的权值更新过程。
GBDT 利用加法模型和前向分步算法实现学习的优化过程。并在优化损失函数时利用损失函数对当前模型的负梯度作为残差的估计,通过不断拟合负梯度的值依次得到各个基分类器。
因为 GBDT 中的基分类器是 CART 模型,因此各结点选择划分特征的方法与 CART 相同,即遍历所有可能特征及对应的划分点,选择使得下式最小的:
GBDT 本身是不能产生特征的,但是我们可以利用 GBDT 去产生特征的组合。
首先需要明确的是,GBDT 无论用于分类还是回归一直都是使用的 CART 回归树。
假设有训练样本,第步获得的集成学习器为,那么 GBDT 通过下面的递推式,获得一个新的弱学习器:
将损失函数看作向量上的函数,在第轮迭代之后,向量位于 ,如果我们想进一步减小损失函数,则根据梯度下降法,向量移动的方向应为损失函数的负梯度方向,即:
这样如果使用训练集:去训练一棵树的话,就相当于朝着损失函数减小的方向又走了一步。
将 GBDT 应用于回归问题,相对来说比较容易理解。因为回归问题的损失函数一般为平方差损失函数,这时的残差,恰好等于预测值与实际值之间的差值。
而将 GBDT 用于分类问题,则不那么显而易见。这里我们回顾一下逻辑回归是怎么做的:
在 LR 中实际上我们所做的是用线性模型去拟合对数几率,现在我们把这里的线性模型替换成经步学习后的集成学习器即可实现用非线性模型去拟合对数几率的目标。
分类模型可以表达为:
则样本的损失函数为:
从而:
可以看到,需要拟合的近似残差为真实概率与预测概率之差。
于是 GBDT 应用于二分类的算法如下:
,其中是训练样本中的比例,以此作为先验信息。
对:
(1) 计算,并使用训练集训练一棵回归树,其中。
(2) 考虑 shrinkage,可得这一轮迭代之后的学习器,为学习率。
- 将以上得到的学习器累加,得到最终的学习器。
类似地,对于多分类问题,则需要考虑以下 softmax 模型:
这里到是个不同的 ensemble tree,每一轮的训练实际上是训练了棵树去拟合 softmax 的每一个分支模型的负梯度。softmax 模型的单样本损失函数为:
这里的是样本 label 在个类别上作 one-hot 编码之后的取值,只有一维为1,其余都是 0。由以上表达式不难推导:
可见,这棵树同样是拟合了样本的真实概率与预测概率之差,与二分类类似。
- 相同点:
- 都是由多棵树组成;最终的结果都由多棵树共同决定。
- 不同点:
- 组成随机森林的可以是分类树、回归树;组成 GBDT 只能是回归树
- 组成随机森林的树可以并行生成(Bagging);GBDT 只能串行生成(Boosting)
- 对于最终的输出结果而言,随机森林使用多数投票或者简单平均;而 GBDT 则是将所有结果累加起来,或者加权累加起来
- 随机森林对异常值不敏感,GBDT 对异常值非常敏感
- 随机森林对训练集一视同仁权值一样,GBDT 是基于权值的弱分类器的集成
- 随机森林通过减小模型的方差提高性能,GBDT 通过减少模型偏差提高性能