本文是机器学习技法系列文章第八篇。介绍了第三种集成学习算法 AdaBoost 的推导过程。
文章目录
8 Adaptive Boosting
上一节课讲了集成学习中的两种融合模型(Aggregation Models):Blending 和 Bagging。融合模型的意思是说将不同演算法得到的假设函数 通过线性加权或者非线性的方式组合成 ,提高模型的性能。Blending算法是在已知有多个假设函数 ,可以使用 uniform 的形式,即根据投票原则,即一人一票,每票同权,对这些假设函数进行融合。对于二分类问题,现根据该原则计算得分,然后使用sign函数,使结果稀疏;对于回归问题,使用该原则对不同假设函数得到的结果进行加权平均。linear 和 non-linear 的形式同理,只不过规则不同。对于linear Blending,其赋予不同的假设函数 不同的权重;对于non-linear Blending,则更进一步,根据不同的规则,进行加权。
以上是已知多个假设函数 的情形,如果没有,则可以使用拔靴法(bootstrapping)从已知数据集中抽样出许多不同的数据集,然后在这些数据集上得到不同的假设函数 ,这样的算法叫做 Bagging,直译为装袋算法。
本节课继续介绍集成学习算法——Adaptive Boosting(AdaBoost)。
8.1 Motivation of Boosting
首先看一个简单的例子,引出本节课程要讲的内容:
假设老师要教六岁的小朋友(六小lin…儿童?)识别苹果,首先给小朋友们看了许多图片,并告诉大家哪些是苹果,哪些不是苹果,然后让大家说出应该怎样分辨苹果。
老师首先提问了 Michael ,他看了之后说:应该以是否为圆形区分苹果,如果是圆形就是苹果。很显然这样是有问题的,因为比如橘子、桃子、柠檬、西红柿等等也是圆形,说明这个判别标准很容易犯错。
接下来,老师继续引导这些小朋友,然后让小朋友们修正判断准则。
首先,老师将不符合判断标准的图片方法,也就将是圆形,但不是苹果的图片放大,将符合标准的图片缩小;然后,告诉小朋友们这些是圆形,但并不是苹果。然后,让小朋友们继续判断。然后老师提问了 Tina 小朋友,她回答说:苹果应该是红色的。很显然这也是不对的,然后老师将红色西红柿和绿色的苹果放大给小朋友们看,并说:红色不一定是苹果,比如西红柿;苹果也不一定只有红色,比如绿色的苹果。可以看出,老师的任务就是指出判别标准中不完美的地方,然后引导小朋友们做修正。
通过 Michael 和 Tina 两位小朋友的判断,现在已经有两条不太一样的规则用来判断是否为苹果。此时,让小朋友们继续做判断,大家可能会有不一样的意见。
老师提问了 Joey,他回答说:苹果也可以是绿色的!于是,老师将是苹果但不是绿色的苹果标了出来,此时就是在这条规则下犯的错误。
然后老师提问了 Jessica,她回答说:苹果是圆形的,可能是绿色也可能是红色,并且有梗(stem,把儿)。
可以看出,此时的判断标准已经几乎不犯的错误。
更一般地,将以上提到的概念,转换成数学表示有:
这些不同的小朋友提出的判断标准就代表一些简单的假设函数 ,在上图中就是灰色的线。将这些假设函数融合就是简单融合模型的假设函数 ,也就是图中黑色的线。可以看出,黑色的线分类效果更好,可以将正负两类样本分开。
上例中的老师就是演算法Adaptive Boosting,他让学生在找出 的过程中,专注于犯错误的样本上面。将这些犯错的样本称为 key example。
习题1:
8.2 Diversity by Re-weighting
Bagging 的核心是 Booststraping,使用 Bootstrap 在原数据集 上进行抽样(有放回,可重复抽样),得到与原数据集类似的一个个小的数据集 。使用不同的演算法在这些小的数据集上训练,得到不同的假设函数 。 Bootstrapping 通过 Re-weighting 处理得到 的方法流程如下:
首先在数据集 中使用拔靴法抽样,假设抽得的子数据集为 ,然后通过最小化目标函数 ,得到对应的假设函数 。为了实现加权,也就是类似投票的动作。引入参数 ,表示第 次抽样中,包含样本 的个数。此时,得到加权后的目标函数 。
其实,可以通过另一个角度看待Bagging的核心思想,它其实是通过拔靴法产生不同的 ,也就是相当于权重,然后在基本的目标函数中添加该权重系数进行加权,表示每个样本犯错误的程度,得到目标函数。最后,通过最小化该目标函数,得到 。注意这里的权重表示对样本进行加权,表示更注重哪个样本,在最小化目标函数时,应该更注重这些点。
以上就是拔靴法得到 的方法。上文提到的算法称为 Weighted Base Algorithm。在不平衡分类问题中,通过权重对样本进行加权来平衡样本数量或者分类数,是一种比较好的解决方案。接下来看看这种算法如何使用。
如果将SVM算法的目标函数乘以权重 ,可以看出经过二次规划求解之后,添加的权重 最终会添加到拉格朗日乘子的上限。如果在逻辑回归的目标函数中添加权重 ,可以将其当做抽样的比例。现在的问题是如果基本的演算法(base algorithm)可以根据不同的权重 决定那些样本可以影响假设函数 的计算,应该如何改变权重,让假设函数越不一样越好。在上一节课程中提到, 越不一样,融合模型的性能越好。应该如何得到不一样的 呢?
如图所示, 与 相关,, 与 相关。如果 在第 次取样得到的数据集上表现不好,则可以推出:
- 下一轮得到的假设函数 不会选到 以及与之相似的假设函数;
- 与 有很大的不同。
那么表现很差怎么度量?一个思路是将这个衡量转化为好坏两种情况,每种情况的概率为0.5,如果假设函数 在第 次取样的样本数据集上的表现接近0.5,表明这个假设函数在新的样本上的表现好坏程度是一样的,说明没啥用,就像抛硬币一样,具有随机性。这样就能最大限度的保证 与 有很大的不同。
那么如何得到最佳的 Re-weighting呢?其推导过程如下:
首先对公示中的符号做了标记。其中,橙色方块表示第 次采样时,犯错误样本的数量;绿色圆圈表示第 次采样时,未犯错误样本的数量。
要让上式尽可能的逼近0.5,只需要将 在第 次取样上的表现犯错和未犯错的数量相等即可,即想办法将两个权重(犯错和未犯错)在一轮中调成相同的。有两种方法可以实现:
- 借鉴第一题小节放大和缩小的思想,将未犯错的缩小,将犯错的放大。
- 第二种方法是乘以犯错率和正确率,未犯错的乘以错误率 ,犯错的乘以正确率(。
这样,原来的 在新的一轮训练中的表现就会非常差,也就不会被基本的演算法选出来。因此也就保证了每次得到的 的差异性,从而得到更好的融合模型。
习题2:
因为在下一轮中,错误点会比正确点的变成三倍重要。
8.3 Adaptive Boosting Algorithm
对上一小节的错误率做放缩:
对于犯错的乘以 ,对于未犯错的除以 。这种缩放后的缩放因子所实现的功能与之前未放缩的是一样的。这种操作的物理意义是说:放大犯错的样本,缩小未犯错的样本;拿第一小节中判断苹果的例子来说,表示更关注分类错误的样本,然后着重去修正错误。这类似于PLA,逐步修正错误的思想。通过以上方法,将错误的样本放大,正确的样本缩小,就能够保证得到不一样的假设函数。应该如何计算呢?
注意,这里为了保证第一次计算的目标函数 最小,将样本权重的初始值 。在计算 的同时,计算系数 ,最后求解出融合模型的假设函数 。错误率 时,误差很大,,意味着此时的假设函数 没啥用,所以权重设为零;当错误率 时,没有误差,,意味着此时的假设函数 很有用,所以权重设为无穷。
以上这种算法就是 Adaptive Boosting(AdaBoost) ,它包含三个部分:
其完整的算法流程如下:
有些中文文献中,称其为“皮匠法”(三个臭皮匠赛过诸葛亮),常用还是AdaBoost。下面看一下AdaBoost理论上的保证:
其中, 表示模型复杂度, 表示假设函数 的VC Dimention, 表示迭代次数。
不等式中的第一项 当错误率 满足条件 时,经过 次迭代训练之后, 。第二项 在 次迭代过程中 变化不大。如此,可以使得 很小。
习题3:
8.4 Adaptive Boosting in Action
在之前的机器学习课程作业中提到了 decision stump算法,它的物理意义是使用水平或者竖直的直线分割输入空间进行分类。可想而知,这样的分类器的分类效果是不好的,可以将其与Adaptive Boosting 结合使用,提高分类能力。看一个简单的例子:
原始的数据集是二维空间中的二分类样本。Adaptive Boosting 算法的第一步是将这些样本当做一样,然后使用decision stump 随机的切分(水平或者垂直方向)。如下图所示
发现右边的蓝色圈圈被错误的分为了负类,因此要重点关注这些分类错误的样本点,也就是说要乘以比较大的权重 。其它的被分类正确的样本点将其缩小。然后使用decision stump 切分,得到如下结果:
发现负类被分为了正类,因此将这些分类错误的红色叉叉乘以比较大的权重,表示更注重这些分类错误的样本。再次做划分:
发现仍然存在错误的样本点,将其方法,然后进一步切分:
再次做切分:
经过五次切分,就得到了比较复杂的分类边界,并且可以将样本分割开。整个过程如下:
如果数据集更复杂呢?
其实是一样的,只不过需要做 decision stump 的次数更多。可以看出 AdaBoost-Stump是一个非线性模型。相比于Kernel SVM,更加有效率,这也是集成学习模型的优势。该算法还可以用用于实时人脸检测:
可以看出,AdaBoost-Stump 可以高效地选择和融合特征。
习题4:
Summary
本节课介绍了集成学习的第三种模型——Adaptive Boosting(AdaBoost)。第一小节通过一个简单的教小朋友识别苹果的例子引出了该模型的算法流程。其核心思想是,每一轮重新赋予不同的假设函数 不同的权重,把错误的权重提高得到尽可能不同的假设函数 ,最后通过权重 将这些不同的 进行加权组合,得到融合模型的假设函数 。最后通过加入 decision stump 算法,可以实现实时的提取和融合特征。
讲到这里,我们知道 Bagging是uniform aggregation;AdaBoost 是 linear aggregation;下一节介绍 conditional aggregation 算法——Decision Tree。