基本思想
Adaboost是adaptive boosting的缩写,是一种基于Boosting的融合算法,其核心思想是将多个弱分类器通过添加相应的权值组合成一个强分类器。对于分类效果好的弱分类器给更大的权值,反之则给更小的权值。同时它还是一种迭代算法,后一个弱分类器通过增加前一个弱分类器分错的样本的权重来达到更好的分类效果。最后将所有的弱分类器结合成一个强分类器,作为最终的算法模型。
通过Adaboost算法的定义可以看出,算法核心由两部分组成:
- 第m个弱分类器的权重
,
为第m次迭代的错误率 ;
- 第m+1次样本迭代的权重
为归一化因子,
为弱分类器解析函数
第一次迭代所有的样本权重:
由此看出,Adaboost算法的每次迭代的权重需要通过前一次的权重得出,所以不能并行计算。
算法推导
- 弱学习器:
只有两种结果,关注特征也比较少,分类能力较弱。
- 强学习器:
,
每个弱分类器的权重。
将每个强分类器通过计算的权值进行线性组合得到强分类器。 -
损失函数:
n 为样本个数;函数满足条件返回1,不满足则返回1;
为强分类器预测值,套一个sign函数使其返回1或-1,大于0返回1,小于0返回-1。
其中:函数 判断分类器
与实际标签值
是否相等,即是否预测正确,正确则相等,返回值为0; 不正确则不想等,返回值为1。那么求和之后的值即为该分类器分错了多少个样本,即损失。
但是该函数并不单调,所以无法进行优化。那么通过优化后面的式子来达到优化损失函数的效果。
那么损失函数的优化即转化为对的优化问题。
损失函数优化的最终目的是让函数可以和分类器同趋势反映模型分类的准确率,那么该函数如何正确反映模型分类的准确率,通过下面推导得出。
分析该函数,及
的取值分别有两种:
可通过表格更直观感受:
-yf(x) | y = 1 | y = -1 |
---|---|---|
f(x)>0 | <0 分对了 (1) | >0 分错了(1) |
f(x)<0 | >0 分错了 (2) | <0 分对了(2) |
通过图像观察优化方向(a = 2.1和e差不多,趋势也一样了,不要在意这些细节)
所谓优化损失函数,就是以为了让损失函数尽可能小为核心思想,对函数进行优化。不论分对还是分错,都要通过变化f(x)使损失函数尽可能小:
所以:x轴
- 在分对了(1)情况下,f(x)>0, f(x)↑
- 在分对了(2)情况下,f(x)<0, f(x)↓
- 在分错了(1)情况下,f(x)>0, f(x)↓
- 在分错了(2)情况下,f(x)<0, f(x)↑
按以上趋势变化
绝对值越大,损失函数越往左优化,损失函数
值也就越小。就可以达到优化的目的。
该损失函数的优化是基于函数空间的优化,也就是说优化的并不是像梯度下降那样的函数的参数的值,可以通过回代算出的值。这里的f(x)是优化的对象,而f(x)是不能通过带入带回算出来的值。
结果:
前k-1个弱分类器组成的分类器
前k个弱分类器组成的分类器
强分类器,就是前k-1个弱分类器组成的分类器加上最后一个弱分类器。有迭代关系损失函数优化:
为第m个学习器的权重;
为第m个弱分类器,n为样本个数。
优化损失函数:
把e的指数项拆开
样本权重 从上一次迭代中获得的 已知 当作常数
即为所求的学习器权重
为样本的真实标签,结果两种1, -1
为样本预测标签,结果两种1,-1
分对→; 分错 →
则函数可变为:
第一项分对的个数,第二项分错的个数
两项同时除以所有样本的权重,进行归一化,得:
那么上式的第二项的系数即为分错的概率即错误率,
那前一项的系数即为正确率(1-错误率)
为表达方便,令它为,则上式可写作:
通过上式求出样本权重即对
求导,令导数为0即可。
- 求导获得
的值
两边取对数
至此,我们求推出了Adaboost算法的两个关键参数,了解了算法的数学原理。
总结
- Adaboost是一种Boosting的融合算法,它通过级联的方式把一系列若模型融合在一起变成一个强模型;
- 既可以做分类也可以做回归(大多数算法都可以)
- 在做分类模型时,默认的基学习器是决策树,但是基学习器可以是任意一种支持样本加权的算法,如逻辑回归,SVM等
优点: 既可以处理连续数据集,也可以处理离散数据集,模型鲁棒性很强,泛化能力强;结构简单,解释性强。
缺点:对异常样本敏感,异常样本在迭代过程中易获得更大的权重么,影响整个模型的预测结果。