adboost算法python adaboost算法详解_权重

1

前言

    用一条垂直于X轴或者Y轴的直线将蓝色点和黄色点成功分离,无论这个直线是怎么选取,这个分类都不可能达到100%的准确率。当年感知机的提出为我们解决线性问题提供了解题思路,当面对异或问题的时候,感知机却无能为力。后来引入了激活函数,解决了异或问题,给感知机注入了活力。回到正题,当一条直线无法正确划分这个分类的时候,要怎么做呢?引入激活函数,可以吗?

adboost算法python adaboost算法详解_权重_02

2

Bagging

adboost算法python adaboost算法详解_数据_03

Bagging训练流程:

  1. 在训练数据个数为X的数据集中,随机抽取m个样本集(基本分类器C训练结束后将这些样本放回)
  2. 通过对随机抽取出来的m个样本集进行训练,形成一个误差较小的基本分类器C1
  3. 对基本分类器C1赋予权重W1
  4. 回到步骤1,重新进行抽取m个样本,最后将各个分类器按照一定的权重进行线性叠加,形成一个由基本分类器组成的强分类器

Bagging的特点:

  A. 对每个分类器,输入数据都是从原始训练数据中可重复的采样, 每个分类器的输入服从相同的分布,且各输入之间相互独立。而Boost中,各训练数据的分布不独立,每个分类器的输入样本之间也不独立。

B. 各分类器可以采用相同算法,不同的超参数;也可采用不同算法;

C. 每个分类器的输出没有权重之分,都是平等的。

它的特点在“随机采样”。那么什么是随机采样?

  随机采样(bootsrap)就是从我们的训练集里面采集固定个数的样本,但是每采集一个样本后,都将样本放回。也就是说,之前采集到的样本在放回后有可能继续被采集到。对于我们的Bagging算法,一般会随机采集和训练集样本数m一样个数的样本。这样得到的采样集和训练集样本的个数相同,但是样本内容不同。如果我们对有m个样本训练集做T次的随机采样,,则由于随机性,T个采样集各不相同。

   此外Bagging在进行权重分配的时候有多种不同的分配方式:

  1. 简单的投票法是相对多数投票法,也就是我们常说的少数服从多数
  2. 稍微复杂的投票法是绝对多数投票法,也就是我们常说的要票过半数。在相对多数投票法的基础上,不光要求获得最高票,还要求票过半数。否则会拒绝预测。
  3. 更加复杂的是加权投票法,和加权平均法一样,每个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。

Bagging的缺点:

 很可能在每次抽样m个样本的时候,会拿到与之前抽样相同数据的情况,导致分类器效果在进行线性组合后形成的强分类器效果不佳,在《机器学习》一书中也提到,若进行随机采样,将会有36.8%的样本是不会被抽样到,故由于训练集带来的训练误差难以避免

3

boost提升方法

adboost算法python adaboost算法详解_数据_04

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

    集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。一般情况下,集成学习中的多个学习器都是同质的"弱学习器"。

基学习算法(同质集成):例如“决策树集成”、“神经网络集成”(对应的个体学习器称之为基学习器)

异质集成:包含不同类型的个体学习器——同时包含决策树和神经网络等不同种类的学习方法

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

   如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的.

  非常有趣的是 Schapire后来证明强可学习与弱可学习是等价的, 在学习中,如果已经发现了“弱学习算法”,那么能否将它提升( boost)为“强学习算法”.

   大家知道,发现弱学习算法通常要比发现强学习算法容易得多.那么如何具体实施提升,便成为开发提升方法时所要解决的问题.

在集成的过程种很可能会发生以下三种情况:

  1. 集成效果尚佳,分类效果提升
  2. 集成效果不明显,分类效果无提升
  3. 集成效果差,分类效果下降

adboost算法python adaboost算法详解_权重_05

4

Adaboost提升思路

这样,对提升方法来说,有两个问题需要回答:

1.在每一轮如何改变训练数据的权值或概率分布;

2.如何将弱分类器组合成一个强分类器.

   Adaboost算法的核心思想就是由分类效果较差的弱分类器逐步的强化成一个分类效果较好的强分类器。

   而强化的过程,就是如下图所示,逐步的改变样本权重,样本权重的高低,代表其在分类器训练过程中的重要程度。而分类器在训练的过程中会更加看重这些样本,进行“特殊照顾”

  所谓“三个臭皮匠,顶个诸葛亮”正是这个道理,可以看到在每一次分类的过程中,被分类错误的点的面积(即权重)在上升,分类正确的点的面积(即权重)在下降,能够更好的使得分类器注意到这些点。

adboost算法python adaboost算法详解_权重_06

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

1. 如何计算学习误差率e

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

3. 如何更新样本权重D

4. 使用何种结合策略

这是Adaboost整个的算法流程,公式看起来枯燥无味,不如举个例子看看。

adboost算法python adaboost算法详解_权值_07

训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)},其中x表示输入样本,y∈{+1,−1}为对应的标签。

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

adboost算法python adaboost算法详解_权重_08

(a)在权值分布为D1的训练数据上,阈值ν取2.5时分类误差率最低,故基本分类器为

adboost算法python adaboost算法详解_数据_09

(b)G(x)在训练数据集上的误差率

adboost算法python adaboost算法详解_权值_10

(c)计算G(x)的系数

adboost算法python adaboost算法详解_adboost算法python_11

(d)更新训练数据的权值分布

adboost算法python adaboost算法详解_数据_12

原先权值(表1):

adboost算法python adaboost算法详解_adboost算法python_13

现在更新后的权值(表2)

adboost算法python adaboost算法详解_数据_14

可以注意到被分类错误的点的权值是上升了,这是因为在公式中

adboost算法python adaboost算法详解_权值_15

当判断一致的时候,指数函数的指数是负数,exp(-α)<1,

当判断不一致的时候,指数函数的指数是正数,exp(α)>1

根据表2的权值,我们应该着重关注x=6,7,8这三个点。

adboost算法python adaboost算法详解_数据_16

adboost算法python adaboost算法详解_权重_17

现在更新后的权值(表3)

adboost算法python adaboost算法详解_adboost算法python_18

 可以看到,由于第二个分类器的在x=3,4,5上分类预测错误,相对应的权值都会上升。基本分类器2的权值为什么会比基本分类器1的权值高呢?那是因为基本分类器2的预测误差率比1的小,基本分类器1的误差率为0.1+0.1+0.1=0.3,而基本分类器2的误差率为0.0715+0.0715+0.0715=0.2143,当误差率降低的时候,分类器的权重会上升,代表着这个分类器进行“投票”的时候比重是比1大的。同理构造分类器3。

adboost算法python adaboost算法详解_adboost算法python_19

adboost算法python adaboost算法详解_权重_20

adboost算法python adaboost算法详解_adboost算法python_21

总结:权值变化表(红色标注的为该分类器分类错误的权值变化)

adboost算法python adaboost算法详解_数据_22

adboost算法python adaboost算法详解_数据_23

  注意:需要注意的是,boosting 算法在训练的每一轮都需要检查当前生成的基学习器是否满足基本条件,一旦条件不满足则基学习器被抛弃。初始设置的学习轮数T也许未达到,可能导致最终集成的学习器性能不佳。

5

总结

adboost算法python adaboost算法详解_adboost算法python_24

6

案例

利用Adaboost从疝气病症预测病马的死亡率

adboost算法python adaboost算法详解_adboost算法python_25

adboost算法python adaboost算法详解_adboost算法python_26

  从上述结果中可以看出,当弱分类器数目达到50个的时候,训练集和测试集的预测准确率均达到了一个比较高的值,但是如果继续増增加弱分类器数量的话,测试集的准确率反而开始下降了,这就是所谓的过拟合(overfitting)