林轩田Adaptive Boosting

Posted notwice

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了林轩田Adaptive Boosting相关的知识,希望对你有一定的参考价值。

Adaboost推导
每一笔样本都必须有一个权重,因此子模型要支持样本可以带权重,亦即在计算误差时可以考虑要本的权重
技术分享图片
例如SVM,LR中通过稍微损失函数使得可以考虑样本的权重:
SVM(软间隔,硬间隔貌似没有损失函数)是通过在松弛项前面增加权重。相应的,推导后,alpha的上限C也要乘以权重;
LR是直接将该样本上的误差乘以损失函数。
技术分享图片

现在假定子模型可以支持每个样本都有权重了。
子模型相差越大,最后集成时效果越好,怎样尽量得到不一样的子模型呢?
考虑两个时刻的子分类器gt,g(t+1), 它们对应的权重是ut,u(t+1).
如果gt在以u(t+1)为样本权重表现不好,那么以u(t+1)为样本权重训练得到的g(t+1)肯定和gt相差很大
技术分享图片
目标: 对于二元分类而言,要使gt在u(t+1)上的分类效果最差,即gt在u(t+1)上的分类效果跟瞎猜没区别,即分类正确率为0.5
即:调整u(t+1),使gt在u(t+1)上的分类正确率为0.5
技术分享图片
如何调整呢?将gt分类的结果分为正确分类的部分,和错误分类的部分。将这两部分的带权误差分别加起来:
技术分享图片
那么要使正确部分和错误部分的带权误差相等
简单方法:分类正确的样本都乘以分类错误的样本的比例;分类错误的样本都乘以分类正确的样本的比例。这样刚好可以使两部分的带权误差相等。
技术分享图片
基于上面的这种权重更新的方式,重新定义一个放缩因子t
技术分享图片
正确的样本需要除以t;错误的样本需要乘以t
这个放缩因子的含义:t如果大于1,表明样本的分类正确率>0.5; 因此如果此时正确样本除以t,错误样本乘以t,就真的是降低正确样本权重,提高错误样本权重。

初始的权重u0: 均分
最后如何继承所有的子模型? 可以自行决定,但是平均相加不是最好的。
想法:表现好的子模型的权重更高
adaBoosting的选择: 子模型的权重是 ln(t)
在生成每一个子模型的时候,顺带计算其在最后集成时的权重alpha
技术分享图片

AdaBoosting的理论保证
一个理论证明:只需要子模型的分类准确率>0.5, 就可以在log(N)轮内,让E_in = 0
技术分享图片

理解Adaboost(Adaboost等价于以指数误差为损失函数的前向加法模型 from 李航)
所谓前向加法模型,即一个一个地添加子模型,使得最后所有子模型的加权平均结果的预测效果最好(而不是同时产生所有的子模型)

之前将adaboost, 说它将每个子模型的权重设为技术分享图片技术分享图片是当前子模型的预测错误率,但是对于为什么这样设定只给出了一些直观上认识,这一节换一个角度看adaboost,从理论上说明为什么要这样设定。

首先将adaboost中,正确的分类样本和错误的分类样本的权重更新公式写成统一形式:
技术分享图片
这里用到了子模型的权重技术分享图片.这样ut可以写成u1再一系列连乘的结果。
技术分享图片
注意标黄的部分,其实就是到t为止前t个子模型的预测结果(都是+1或-1)的加权平均,如果再加上sign操作,就是前t个子模型集成的模型! (后面可以看到,整个exp的式子,其实就是前t个模型的集成模型的指数误差)
技术分享图片
称标黄的部分,即技术分享图片voting score.
那么在adaboost中,在第t+1个子模型中样本xn的权重,实际上与前t个子模型对它的voting score是指数关系
技术分享图片
对于adaboost而言,随着子模型的增加,预测效果应该越来越好。即如果到了第t轮,把这前t个模型的集成模型直接用来预测样本xn,那么当然是希望分类正确,并且margin越大越好

技术分享图片
这样带来的结果就是技术分享图片很小! 即样本xn在第t+1个子模型上的权重很小
因此,下面要证明adaboost具有一个性质: 越往后的子模型,每个样本的权重越来越小(亦即所有样本的权重之和越来越小),也即下面的式子右边的部分越来越小。(后面可以看到,权重越小,代表指数误差越小)
技术分享图片
为了证明这一点,将上面的式子的右边看成是一个损失函数,用梯度下降法来使得这个损失函数越来越小
假设用技术分享图片作为损失函数,用voting score来做预测(蓝色部分,s),那么随着ys的值得变化,导致的误差的变化是(假设正确的label是1):
技术分享图片
这个误差被称为指数误差(exponential loss function)
指数误差定义:
技术分享图片

证明: adaboost 等价于 指数误差的前向加法模型
假设前面已经有了t-1个子模型,要怎么加入第t个子模型呢?考虑对指数误差进行梯度下降,找到第t个子模型h(这里是对一个模型梯度下降,即在前面的所有子模型中,加上这个子模型*步长),将它加到前面的子模型中去做预测,使指数误差最小:
注意: 
技术分享图片可见按照指数误差的定义,adaboost中样本的权重其实是前面的子模型的集成模型对它的指数误差,这也符合boosting的思想,即错误越大,权重越大),第二步用这个替换
技术分享图片
推导的最后一步是对exp函数在原点附近进行泰勒展开

因此,需要最小化这一项:
技术分享图片
这一项只用考虑子模型h的分类是否正确,同时每个样本都以技术分享图片为权重。(这不刚好使以
技术分享图片为权重去训练一个子模型么

技术分享图片
因此只需要使技术分享图片更小即可,技术分享图片表示第t个子模型h的,以技术分享图片为样本权重的分类错误率。而adaboost刚好是以
技术分享图片为样本权重去训练下一个子模型,
即每个子模型在以
技术分享图片为权重训练时就刚好使
技术分享图片最小。
因此,整个adaboost的过程,刚好使这个指数误差越来越小!

刚才找出了最小化指数误差,下一个子模型应该是什么样的。但是在梯度下降了还有一个步长:
技术分享图片
考虑寻找步长,使误差函数下降的最多(steepest descent)
对于第t个子模型,根据其分类正确还是分类错误,考虑对误差函数的值的影响:
技术分享图片
带权分类错误的样本数目为技术分享图片,带权分类正确的样本数目为技术分享图片,这样就可以得到上面的最后一项。
考虑寻找最佳的技术分享图片,使上式最小,对其求导=0, 刚好得到:
技术分享图片
技术分享图片,即之前adaboost中定义的结果。

AdaBoost Decision Tree
考虑将决策树应用于Adaboost, 如何更改样本的权重?
因为决策树本身不支持样本有权重,因此可以将样本的权重当做这个样本被抽样到的概率,这样按照每个样本的权重抽样后得到的数据集可以大致反映每个样本的权重。而不再采用随机抽样。
技术分享图片

考虑adaboost如何给每个子模型分配权重:
技术分享图片
即:分类正确率越高的子模型,最后的权重越大。

但是,如果是决策树运用于Adaboost,由于决策树在完全生长的情况下E_in=0,因此它的权重会无限大!
技术分享图片
因此,需要对决策树进行剪枝,同时不能让这个决策树的样本包含所有的样本(这个在上面的根据权重的抽样方式已经解决了
技术分享图片

这就是AdaBoost Decision Tree的通常做法
技术分享图片


















































以上是关于林轩田Adaptive Boosting的主要内容,如果未能解决你的问题,请参考以下文章

林轩田《机器学习基石》 简介

林轩田--支持向量机笔记

台湾大学林轩田教授机器学习基石课程

林轩田SVM

机器学习从入门到放弃

学习资料