Adaboost

Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。

adaBoost算法的研究以及应用大多集中于分类问题,同时也出现了一些在回归问题上的应用。就其应用adaBoost系列主要解决了: 两类问题、多类单标签问题、多类多标签问题、大类单标签问题、回归问题。它用全部的训练样本进行学习。

 

过程

wKiom1Q9D3miak5XAAC5UfUviPY453.jpg

这就是Adaboost的结构,最后的分类器YM是由数个弱分类器(weak classifier)组合而成的,相当于最后m个弱分类器来投票决定分类,而且每个弱分类器的话语权”α不一样。可以看到整个过程就是和最上面那张图一样,前一个分类器改变权重w,同时组成最后的分类器.如果一个训练样例在前一个分类其中被误分,那么它的权重会被加重,相应地,被正确分类的样例的权重会降低

 

Adaboost有很多优点:

1)adaboost是一种有很高精度的分类器

2)可以使用各种方法构建子分类器,adaboost算法提供的是框架

3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单

4)简单,不用做特征筛选

5)不用担心overfitting

缺点在于:

1)容易受到噪声干扰(这也是大部分算法的缺点)

2)执行效果依赖于弱分类器的选择。

 

算法本身是改变数据分布实现的,它根据每次训练集之中的每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改权值的新数据送给下层分类器进行训练,然后将每次训练得到的分类器融合起来,作为最后的决策分类器。

完整的adaboost算法如下(例子请看数据挖掘概念与技术P248)

wKiom1Q9D5_xqVhOAAES7anNkX0622.jpg

Adaboost举例

也许你看了上面的介绍或许还是对adaboost算法云里雾里的,没关系,百度大牛举了一个很简单的例子,你看了就会对这个算法整体上很清晰了。

  下面我们举一个简单的例子来看看adaboost的实现过程:

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

  第一步:

  wKioL1Q9EHDy37rJAAOjCoMp1ME720.jpg

  第二步:

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

  第三步:

  得到一个子分类器h3

  整合所有子分类器:

  因此可以得到整合的结果,从结果中看,即使简单的分类器,组合起来也能获得很好的分类效果。

 

adaboost算法的一些实际可以使用的场景

1)用于二分类或多分类的应用场景

2)用于做分类任务的baseline,无脑化,简单,不会overfitting,不用调分类器

3)用于特征选择(feature selection)(人脸识别,车牌识别,字体识别)

4Boosting框架用于对badcase的修正

  只需要增加新的分类器,不需要变动原有分类器

  由于adaboost算法是一种实现简单,应用也很简单的算法。Adaboost算法通过组合弱分类器而得到强分类器,同时具有分类错误率上界随着训练增加而稳定下降,不会过拟合等的性质,应该说是一种很适合于在各种分类场景下应用的算法。