(作者:陈玓玏)
一、Adaboost算法
我的理解集成学习的一大优点是,如果你想要学习一个很强的学习器,没有问题,但是很容易产生过拟合,但是如果你学习很多个弱的学习器,每个学习器都不容易过拟合(因为精度不那么高,模型不那么复杂),而且它们学习的可能是不同的特征、不同的样本,相互之间还能够有改进,通过这些弱学习器的线性组合能够产生同样精度但不容易过拟合的分类器。
Adaboost是集成学习中boosting类方法中的一种典型方法,通过改变样本权重来学习多个分类器,并将基分类器结果做线性组合来提升分类性能。它在1995年由Freud和Schapire提出。
Adaboost算法有对权值巧妙应用,体现在两个方面:1)每次训练都会提高上一轮错分样本的权值,降低正确分类样本的权值,将本轮训练的关键放在上一轮的错分样本上,这样每一轮训练过后,分类器的精度都能提升。2)最终输出结果时,采用加权多数表决法,即分类误差高的基分类器所占权重更低,误差低的基分类器所占权重更高,以此保证最终结果的精度。
具体的算法流程如下:
输入:
,
表示第
个样本的特征向量,
第
个样本的label值。
输出:最终的分类器
。
1) 初始化训练数据的权重,权重均等保证我们最开始是在原始数据上学习的(后面虽然应该也是原始样本,但是误差准则已经变化了)。
2) 对于第
个基分类器执行以下操作:
a. 训练得到第一个基分类器
,分类器学习的准则是分类误差率最小准则;
b. 计算基分类器的误差率:
这个误差率就是所有误分样本的权重和。
c. 计算基分类器
在最终结果中的权重值:
的底数是
,其实际含义是加权分类正确率与加权分类错误率的比值(比值好像往往比绝对值更能说明问题),正确分类样本越多,基分类器在最终结果中影响越大。
d. 更新样本的权值,方便在下一轮构建基分类器时作为最小化准则使用:
是归一化因子,是所有样本的
的和,官方解释是归一化是为了使得权重是概率分布,我自己对归一化的原因的另外一种理解是如果不进行归一化,则权重如果一下子增加或减少得太多,后面的基分类器在构建时就只考虑上一轮错误样本,完全不考虑之前分类正确的样本是否在本轮也分类正确了,这样就不满足每一轮的误分类率都在下降了。
3)
个分类器构建完毕后,得到最终的分类器:
二、一些值得讨论的问题以及我的想法:
1)Adaboost并没有规定每个基分类器具体使用的是什么分类器?(并没有限制说使用什么基分类器,应当是决策树这些算法都OK的)
2)没有说明输入下一个基分类器的样本是否是乘上了权重的(看例子应该不是,每个基分类器的训练用的都是原始样本,权重只是用来帮助构建分类器的,因为构建的分类器要是分类误差率最小的,而分类误差率计算要用到权重,且上一轮分类错误的权重更高,这就使得本轮分类器必须尽可能将上一轮错分的样本分类正确,才能获得最小的分类误差率)。
3)为什么最终的输出结果用的是符号函数?(最终得出的
值不一定是在[-1,1]范围内的,并且adaboost用来做
分类的,是用符号来判断类别的,因此最终得出的结果要用符号函数激活。)
4)为什么计算样本权重值时,要用到上一轮的基分类器的权重
?(以下是个人拙见,首先可以把样本权重更新的公式写为以下形式:
由上面的公式以及
的关系可知,错分样本的权重将会是正确分类样本权重的
倍,随着
的增大,正负样本的权重也会增加更多,也就是说随着基分类器的分类越来越准确,分类器在已经分类正确的样本上会花费更少的精力,因为正样本权重会小到无法对分类器最终的形成起到什么影响,无形中会节约一些训练成本。如果不加入这个参数在权重更新公式中,那么每次分类正负样本的差距都是一样的。)
参考文献: 1. 书籍:《统计学习方法》,李航著。