小扯--AdaBoost的大世界

来源:互联网 发布:今日头条看nba数据 编辑:程序博客网 时间:2024/04/29 22:16

提升(boosting)方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。


  提升方法,基于这样一种思想:对于一个复杂的任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独判断的好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。


提升方法的几个理论概念:

o一个概念如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么,这个概念是强可学习的;

o一个概念如果存在一个多项式的学习算法能够学习它,并且学习的正确率仅比随机猜测略好,那么,这个概念是弱可学习的;
o强可学习与弱可学习是等价的。
o在学习中,如果已经发现了“弱学习算法”,能否将他提升为“强学习算法”。


boosting方法有许多不同的变形。其中最流行的一种就是AdaBoost方法,这个名称是“adaptive boostint”的缩写。这个方法允许设计者不断地加入新的“弱分类器”,直到达到某个预定的足够小的误差率。在AdaBoost方法中,每一个训练样本都被赋予一个权重,表明它被某个分类分类器选入训练集的概率。如果某个样本点已经被准确分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被正确分类,那么它的权重就得到提高。通过这样的方式,AdaBoost方法能够“聚焦于”那么较为困难(更富有信息)的样本上。


AdaBoost算法:

给定一个训练数据集T={(x1,y1), (x2,y2)…(xN,yN)},其中实例,而实例空间,yi属于标记集合{-1,+1},Adaboost的目的就是从训练数据中学习一系列弱分类器或基本分类器,然后将这些弱分类器组合成一个强分类器。


实现流程:

 输入:设训练数据集T={(x1,y1), (x2,y2)…(xN,yN)}

 输出:最终分类器 G(x)

(1)初始化训练数据的权值分布

       (2)对于满,2,3...M

a. 使用具有权值分布Dm的训练数据集学习,得到基本分类器

   

b.计算Gm(x)在训练数据集上的分类误差率

   

c.计算Gm(x)的系数

       d.更新训练数据集的权值分布

这里,Zm是规范化因子:

(3)构建基本分类器的线性组合

得到最终分类器

Adaboost 举例:

借鉴百度人才的例子;

 

图中,“+”和“-”分别表示两种类别,在这个过程中,我们使用水平或者垂直的直线作为分类器,来进行分类。


首先,

根据分类的正确率,得到一个新的样本分布D,一个子分类器h1

  其中划圈的样本表示被分错的。在右边的途中,比较大的“+”表示对该样本做了加权。

其次,

根据分类的正确率,得到一个新的样本分布D3,一个子分类器h2

然后,

得到一个子分类器h3

   整合所有子分类器:

由例子结果分析,即使每个弱的分类器,各自的分类效果并不好,但是最终整合成的强分类器,也是有很好的效果!




总结:

AdaBoost是一种迭代算法,核心思想是在初始化权重后,进行训练得到每一次迭代的弱分类器,接着计算分类错误的错误率去调整错分样本权重,作为下一次迭代的输入参数,这样便可以突出错分样本的比重,受到“更多的照顾”,知道错误率小于某一个设定的阈值,得到N个弱分类器后,最终融合成一个强分类器。实验证明,当简单分类器数量趋向于无穷时,强分类器的错误率也将趋于零。






0 0