这一篇开始介绍Boosting,我们先介绍Boosting中的第一个模型, AdaBoost, 二分类学习模型
AdaBoost的基本原理,是每次改变样本的权重,增大本次学习之前分类错误的样本的权重,减小已经分类正确的样本的权重,每次学习一个基分类器,加到现有的模型里。然后根据新的分类结果,更新样本权重,学习新的基分类器,并将这些分类器线性组合成为一个强分类器。
为了方便理解,我们从拿到数据集开始一步步考虑这个模型。
数据集
我们在一开始给每一个数据同样的权重,
然后我们用一个基模型(例如cart分类树)去训练数据集,得到一个基分类器。
我们可以得到这个基分类器的分类误差:
然后我们就可以得到这个基分类器的权重 , 所以分类正确率越高,模型权重越大
接下来要更新数据集的权重了, , 其中
然后构建第二个基分类器,得到第二个基分类器的分类误差,基分类器权重,更新样本权重,再构建第三个基分类器。如此这般依次构建一个个基分类器,最后根据基分类器权重线性组合成一个大的分类器即可。
到现在只是说了一下模型的基本概念,现在开始我们来仔细的解释模型。
AdaBoost算法,是模型为加法模型, 损失函数为指数函数,学习算法为前向分步算法的二分类学习方法。我们一步步看这句话
加法模型比较好理解,最终的模型是基模型的线性组合。
现在我们来介绍一下什么是前向分步算法。
在加法模型下,
在给定数据集即损失函数的情况下, 只需要最小化 , 即
直接优化这个是很难的,前向分步算法的想法,就是每次只学习一个基模型及其系数,慢慢逼近最优化的模型,起到了简化这个优化模型的复杂度。
现在我们根据前向分步算法来推出AdaBoost,首先定义损失函数为指数损失。
在第m-1步学习后, 得到
所以我们第m步的目标是,
定义,这是没有归一化过的
因为
, ,
所以 是没有归一化过的。为方便理解,下面就用代替了,因为差一个归一化因子,不会影响优化问题
当前的目标函数为
我们先求, 是个大于0的数,当的时候, 是, 当, 是
所以只需要在权重下, 误分类的点越少越好。
, 这就是AdaBoost每一步学习到的模型。
将带入目标函数,求,
()
推出
其中,
这就是AdaBoost里第m个基模型的误差, 现在我们已经求出了AdaBoost里的基模型和基模型权重,现在我们来看样本权重的更新。
由 和
正如上面所讲, 只要一个归一化因子, 就可以得到和AdaBoost里一样的权重更新了。
至此,我们从加法模型和前向分步算法,在损失函数为指数函数的情况下, 推出了AdaBoost算法,由此也证明了AdaBoost算法,是模型为加法模型, 损失函数为指数函数,学习算法为前向分步算法的二分类学习方法。
下一篇会介绍另一种boosting模型,梯度树
转载请注明,谢谢