Boosting之Adaboost原理
1 Boosting框架
Boosting可以看成多个不同的基分类器的线性加权和的形式,那么自然需要知道每个基分类器及其对应的权重,具体的算法逻辑见下图。
如上图所示,在boosting算法中每一个基分类器都依赖于前面已经生成的基分类器,所以Boosting是一种迭代的算法。根据基分类器迭代方式和权重的不同,Boosting可以分为Adaboost、GBDT、XGBoost三种方式。本文就Adaboost做原理部分的介绍,主要侧重于直观上的理解,比如权重计算的合理性等等。
Boosting算法需要解决下面两个问题:
1. 样本权重或概率分布D
D
的计算
2. 基分类器权重αα的计算
2 Adaboost算法逻辑
以二分类为例,介绍Adaboost算法
2.1 符号标记
- 训练集样本: T={(x1,y1),(x2,y2),...,(xn,yn)}
- (1)样本权重更新的在分类器中的应用
- 之前提到每一次迭代都要更新样本权重,那么样本权重怎么影响基分类器呢?有两种方式:
- 1. 通过修改基本分类器源码,对于树模型修改信息增益或者基尼系数的公式引入权值,这里有点像代价敏感学习
- 2. 对训练样本进行bootstrao抽样,抽样概率等于样本权值
- 上述解释来自知乎高票答主萧瑟的回答
- 在Sklearn中是通过resample实现的,源码[见此]1010行(https://github.com/scikit-learn/scikit-learn/blob/a24c8b46/sklearn/ensemble/weight_boosting.py#L297)
- (2)样本权重更新的计算逻辑
3 Adaboost算法的解释
都说Boosting更关注偏差,前面Adaboost的流程只能从直观上讲,怎么从损失函数的角度思考这一问题呢?
Adaboost算法可以看成加法模型,损失函数为指数函数、学习算法为前向分布算法。下面围绕这三个方面谈一谈。
3.1 加法模型
给出加法模型的形式定义:
至此,所有证明结束,从损失函数角度理解Adaboost算法逻辑性更强。
也许步长和迭代次数是两个比较重要的参数,下次去看sklearn的文档再回来补。
5 Summary
周一看到周四,磨磨蹭蹭,写了两篇笔记,对Adaboost的逻辑还算比较清楚。后面争取写下GBDT和XGBoost以及python调参。对这篇笔记做一点总结。
1. Adaboost损失函数—指数损失函数
2. 为什么可以减少偏差—更关注错分的样本,并且体现在目标函数中
3. 样本权重和基分类器权重如何影响算法—样本权重影响损失函数,分类器权重影响最终投票权重
还有一些问题不太清楚:
1. Adaboost是否存在过拟合问题,怎么处理
2. Adaboost的基分类器是否可以用其他的分类器,强弱分类器做基分类器有什么不同
6 Ref
[1] 李航《统计学习方法》
[2] 刘建平Pinard博客
2018-04-26 于杭州