查看原文:http://www.wyblog.cn/2016/11/01/%e6%8f%90%e5%8d%87%e6%96%b9%e6%b3%95%e5%8f%8aadaboost/提升方法
提升方法思路比较简单,它意在通过改变训练样本之间相对的权重,从而学习出多个分类器,并将这些分类器进行线性组合,从而提高分类的性能。 从以上思路可以看出,提升方法将一个复杂的任务分配给多个专家进行判断,并且对判断的结果进行综合,这样做要比只让一个专家来判断要好,毕竟大家说好才是真的好。
强可学习与弱可学习
- 一个概念,如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个是强可学习的。
- 一个概念,如果存在一个多项式的学习算法能够学习它,但正确率仅比随机猜略好,那么就称这个概念是弱可学习的。
而Boost,恰好就是将弱可学习方法提升为强可学习方法的途径,所以叫做提升方法。提升方法就是从弱可学习算法出发,反复学习,得到一系列弱分类器,然后组合这些弱分类器,构成一个强分类器。 根据以上描述,可以看到有两个问题需要考虑:
- 在每一轮学习中,训练数据的权重值如何确定?
- 组合强分类器时,线性组合的系数如何确定?
AdaBoost
对于第一个问题,AdaBoost算法是提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样做的结果就是,使得被错误分类的样本能得到更多关注。 对于第二个问题,AdaBoost采取加大分类误差率小的弱分类器的权值,使其起较大作用,并且减少分类误差率大的权值。可见,这里的决定因素就是这个分类误差率的大小。
算法
输入:训练数据集 ,其中
;弱学习算法。
输出:最终分类器G(x)。
- 初始化训练数据的权值分布:
- 对于m=1,2,3...M
a). 使用具有权值分布Dm的训练数据集学习,得到基本分类器Gm(x)→{-1,+1}
b). 计算Gm(x)在训练数据集上的误差率:
c). 计算Gm(x)的系数:
d). 更新训练数据集的权值分布:
其中,Zm是规范化因子,
- 构建基本分类器的线性组合并得到最终分类器:
从以上算法可以看到: 最开始步骤1,我们假设了样本具有均匀的权重分布,它将产生一个基本分类器G1(x)。 步骤2是一个m从1到M的循环过程,每一次循环都可以产生一个弱分类器。
- 对于b).可以看到,分类误差率实际上就是被误分类点的权值之和。
- 对于c).是在计算当前弱分类器在线性组合中的系数,由其表达式可知,当e<=0.5时,α>=0,并且随着e的减小而增大,这正印证了我们需要使误差率小的弱分类器的权值更大这个事实。
- 对于d).可以看到,每一个样本的权值ω,都与它原来的标签yi以及预测的标签Gm(xi)有关,当预测正确即它们同号时,exp指数是一个负值,这样就会减小原来样本点的权重;当预测不正确即它们异号时,exp指数是一个正值,它会增加当前样本点的权重。这正印证了我们需要使被误分类样本的权值更大这个事实。
步骤3中要注意一点的是,所有αi之和并不是等于1的,其仅表示对应分类器的重要性。 f(x)的符号决定了实例x的类,它绝对值的大小,表示分类的确信度。
提升树
提升树是以分类树或者回归树为基本分类器的提升方法,它被广泛的应用,例如有名的梯度提升树GBDT,以及另一篇博文分析的XGBOOST。 提升树也是提升方法的一种,所以它的模型还是加法模型,只是选择了决策树作为基函数。则提升树的模型为$latex f_{M}(X)=\sum_{m=1}^{M} T(x:\theta_{m})$。 对于不同的应用情况,模型可以采用不同的损失函数。对于回归问题,可以采用平方误差损失,对于分类问题,可以采用指数损失函数,这里的损失函数一般都只包含了经验损失,并未关注结构风险,这是一个缺点。
梯度提升树算法
梯度提升树利用损失函数的负梯度在当前模型的值,即$latex -[\frac{\partial L_{(y,f(x_{i}))}}{\partial f(x_{i})}]_ {f(x)=f_{m-1}(x)}$,作为回归问题提升树算法中的残差的近似值而拟合回归树。 关于提升树,可参考XGBOOST博文。
http://www.wyblog.cn/2016/11/25/xgboost%E6%96%87%E7%8C%AE%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/
查看原文:http://www.wyblog.cn/2016/11/01/%e6%8f%90%e5%8d%87%e6%96%b9%e6%b3%95%e5%8f%8aadaboost/