机器学习校招笔记3:集成学习之Adaboost

提升的方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(基本分类器),然后组合这些弱分类器,构建一个强分类器。大部分提升方法都是改变训练数据的概率分布(权值分布),根据不同的训练数据分布调用弱学习算法,学习一系列弱分类器。

集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系。前者的代表算法就是是boosting系列算法。在boosting系列算法中, Adaboost是最著名的算法之一。Adaboost既可以用作分类,也可以用作回归。

20170806150200435552068.png

  • 首先从训练集用初始权重训练出一个弱学习器1
  • 根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。
  • 然后基于调整权重后的训练集来训练弱学习器2.
  • 如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。

不过有几个具体的问题Boosting算法没有详细说明。

    1)如何计算学习误差率e?

    2) 如何得到弱学习器权重系数α?

    3)如何更新样本权重D?

    4) 使用何种结合策略?

只要是boosting大家族的算法,都要解决这4个问题。那么Adaboost是怎么解决的呢?

Adaboost算法的基本思路

对于提升来说要回答两个问题:

  • 每一轮如何改变数据的权值或概率分布

    Adaboost做法:提高那些前一轮弱分类器错误分类样本的权值,降低那些正确分类样本的权值。

  • 如果将弱分类器组合成一个强分类器

    Adaboost做法:采用加权多数表决,加大分类误差率小的弱分类器的权值,使得在表决中起较大作用,减少分类误差率大的权值。

Adaboost的分类问题

20170810150233265418245.png

Adaboost的回归问题

20170810150233234840070.png

Adaboost的例子

参见:http://blog.csdn.net/tiandijun/article/details/48036025

20170810150233279640284.png

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

  • 1.第一步:

    算法最开始给了一个均匀分布 D 。所以h1 里的每个点的值是0.1。ok,当划分后,有三个点划分错了,根据算法误差表达式

    20170810150233311288908.png

    ɛ1 = 0.1 + 0.1 + 0.1 = 0.3

    20170810150233319276303.png

    ɑ1 = 0.42

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

    20170810150233296155933.png

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

    更新权值分布:

    每个样本的新权值是变大还是变小,取决于它是被分错还是被分正确。

    20170810150233328843860.png

    即如果某个样本被分错了,则yi * Gm(xi)为负 负负等正,结果使得整个式子变大(样本权值变大),否则变小。

    分错的权值变大,在下一轮的弱分类器得到更大的关注。

    第一轮迭代后,最后得到各个数据新的权值分布D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715)。由此可以看出,因为样本中是数据“6 7 8”被G1(x)分错了,所以它们的权值由之前的0.1增大到0.1666,反之,其它数据皆被分正确,所以它们的权值皆由之前的0.1减小到0.0715。

​ 分类函数f1(x)= a1*G1(x) = 0.42G1(x)。

​ 此时,得到的第一个基本分类器sign(f1(x))在训练数据集上有3个误分类点(即6 7 8)。

​ 从上述第一轮的整个迭代过程可以看出:被误分类样本的权值之和影响误差率,误差率影响基本分类器在最终分类器中所占的权重。(误差率越小,在最后的模型中,起到的作用越大)

  • 2.第二步:

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

    20170810150233361894605.png

  • 3.第三步:

    20170810150233370676746.png

    整合所有子分类器:

    20170810150233373329112.png

指数损失函数(Adaboost)

20170810150233559934150.png

分类Adaboost的弱学习器权重系数公式和样本权重更新公式

Adaboost:

  • 模型为加法模型,

    模型为加法模型好理解,我们的最终的强分类器是若干个弱分类器加权平均而得到的。

  • 学习算法为前向分步学习算法

    我们的算法是通过一轮轮的弱学习器学习,利用前一个弱学习器的结果来更新后一个弱学习器的训练集权重。也就是说,第k-1轮的强学习器为

    fk1(x)=i=1k1αiGi(x)

    而第k轮的强学习器为: fk(x)=i=1kαiGi(x)

    上两式一比较可以得到:

    fk(x)=fk1(x)+αkGk(x)

  • 损失函数为指数函数的分类问题。

    20170810150233629280351.png

    20170810150233646350158.png

Adaboost优缺点

弱学习器的类型。理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树

Adaboost的主要优点有:

最大的一个优点是可以自动的组合弱分类器

    1)Adaboost作为分类器时,分类精度很高

    2)在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。

    3)作为简单的二元分类器时,构造简单,结果可理解。

    4)不容易发生过拟合

    Adaboost的主要缺点有:

    1)对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。

参见:http://www.cnblogs.com/pinard/p/6133937.html