一、应用场景
在使用机器学习建模中,往往会遇到这样的一种场景,给定一批数据,建立的模型不论你怎么调参,验证集在该模型上的表现能力较差,且每次得到的结果也不稳定,出现这样的原因在于你的数据本身可能存在一定问题(预处理),第二就是超参数没调整好,这时就可以考虑采用提升学习算法,提升方法的基本思想是:对于一个复杂的任务来说,将多个专家(模型)的判断适当的综合所得出的判断,要比一个专家单独判断好,实际上就是“三个臭皮匠顶一个诸葛亮”的道理。
二、Adaboost 介绍
AdaBoost算法属于一种迭代算法,它的核心思想是针对同一训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强大的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。与随机森林相似。
AdaBoost是属于boosting中的一种算法。bagging和boosting是两种集成方法,在bagging中是通过随机取样的方法从原数据中得到与原数据规模一样的数据集来获取弱分类器;boosting更进一步,它在数据集上顺序应用了多个不同分类器,如前面说的利用上一个弱分类器的准确率和权重来调整数据,获得下一个分类器。
所以AdaBoost的原理也比较简单,就是通过一些手段获得多个弱分类器,将它们集成起来构成强分类器,综合所有分类器的预测得出最终的结果。这里的弱分类器可以使用任意的分类器如:K-NN分类器、朴素贝叶斯分类器、决策树分类器、logistic回归分类器等等,作为弱分类器,简单分类器的效果更好。在下面的代码中使用的就是单层决策树作为弱分类器。
三、AdaBoost 算法描述
输入:训练集T=(x1,y1),(x2,y2),...,(xn,yn)T=(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{n},y_{n})T=(x1,y1),(x2,y2),...,(xn,yn),y=−1,1y={-1,1}y=−1,1
输出:最终分类器G(x)G(x)G(x)
(1)初始化权值分布
D1=(w11,w12,...,w1N)D_{1}=(w_{11},w_{12},...,w_{1N})D1=(w11,w12,...,w1N),w1i=1/Nw_{1i}=1/Nw1i=1/N,i=1,2,...,Ni =1,2,...,Ni=1,2,...,N
(2)对m=1,2,...,Mm = 1,2,...,Mm=1,2,...,M
(aaa)使用具有权重分布的DmD_{m}Dm训练数据集学习,得到基本分类器
Gm(x)→[−1,+1]G_{m}(x)\to{[-1,+1]}Gm(x)→[−1,+1]
(bbb)计算Gm(x)G_{m}(x)Gm(x)在训练集上的分类误差
em=P(Gm(xi)≠yi)=∑i=1NwiI(Gm(xi)≠yi)e_{m}=P(G_{m}(x_{i}) \neq y_{i})=\sum_{i=1}^Nw_{i}I(G_{m}(x_{i}) \neq y_{i})e