Python机器学习(十七)AdaBoost原理与代码实现

Posted 大码王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python机器学习(十七)AdaBoost原理与代码实现相关的知识,希望对你有一定的参考价值。

 

基本思路

Adaboost体现的是“三个臭皮匠,胜过一个诸葛亮”,它是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),

然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。训练过程如下(参考Andy的机器学习--浅析Adaboost算法,他说得非常形象,贴切。)

       

简单的来说:图中的y1(x),y2(x)....ym(x)都是弱分类器(顾名思义,弱分类器就是分类能力很弱,仅比随机分类好一点点的分类器)
步骤:
1.  初始化了弱分类器 
2.  对  进行迭代处理产生了分类器 
3.  对  迭代处理产生了......
4.  依次迭代最后产生弱分类器 
5.  将m个分类器加权处理,得到一个强处理器
 

关键问题

1.  每一轮遍历如何改变数据的权值或概率分布?

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

对于这两个问题的解答,就是下面介绍的Adaboost原理

AdaBoost原理

AdaBoos流程

AdaBoost(adaptive boosting)的运行过程如下:训练数据中的每个样本,并赋予其一个权重,这些权重构成了向量D。一开始,

这些权重都初始化成相等值。首先在训练数据上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练

弱分类器。在分类器的第二次训练中,将会重新调整每个样本的权重,其中第一次分对的样本的权重会降低,而第一次分错的样本

权重将会提高。为了从所有弱分类器中得到最终的分类结果,Adaboost为每个分类器都分配了一个权重alpha,这些alpha值是基于

每个弱分类器的错误率计算的。其中,错误率  的定义为:

        

而alpha的计算公式如下:

      

D的计算方法如下(始终把握一个原则:正确分类时权重要降低,错误分类时权重要升高,权重升高意味着提升关注度,需要重点优化):

如果某个样本被正确分类,那么该样本的权重更改为:

         

而如果某个样本被错分,那么该样本的权重更改为:

          

在计算出D之后,AdaBoost又开始进入下一轮迭代。AdaBoost算法会不断地重复训练和调整权重的过程,直到训练错误率为0或者分类器的数目达到用户

的指定值为止。

AdaBoost算法原理

假设我们的训练样本是

训练集的在第k个弱学习器的输出权重为

由于多元分类是二元分类的推广,这里假设我们是二元分类问题,输出为{-1,1},则第k个弱分类器Gk(x)在训练集上的加权误差率为:

看弱学习器权重系数,对于二元分类问题,第k个弱分类器Gk(x)的权重系数为:

更新更新样本权重D。假设第k个弱分类器的样本集权重系数为 ,则对应的第k+1个弱分类器的样本集权重系数为:

 是规范化因子,它使  成为一个概率分布。

集合策略,Adaboost分类采用的是加权求和法,最终的强分类器为

代码实现

输入数据

这里同样是使用一个训练数据文件 horseColicTraining2.txt 和一个测试数据文件 horseColicTest2.txt

horseColicTraining2.txt

复制代码
  1 2.000000    1.000000    38.500000    66.000000    28.000000    3.000000    3.000000    0.000000    2.000000    5.000000    4.000000    4.000000    0.000000    0.000000    0.000000    3.000000    5.000000    45.000000    8.400000    0.000000    0.000000    -1.000000
  2 1.000000    1.000000    39.200000    88.000000    20.000000    0.000000    0.000000    4.000000    1.000000    3.000000    4.000000    2.000000    0.000000    0.000000    0.000000    4.000000    2.000000    50.000000    85.000000    2.000000    2.000000    -1.000000
  3 2.000000    1.000000    38.300000    40.000000    24.000000    1.000000    1.000000    3.000000    1.000000    3.000000    3.000000    1.000000    0.000000    0.000000    0.000000    1.000000    1.000000    33.000000    6.700000    0.000000    0.000000    1.000000
  4 1.000000    9.000000    39.100000    164.000000    84.000000    4.000000    1.000000    6.000000    2.000000    2.000000    4.000000    4.000000    1.000000    2.000000    5.000000    3.000000    0.000000    48.000000    7.200000    3.000000    5.300000    -1.000000
  5 2.000000    1.000000    37.300000    104.000000    35.000000    0.000000    0.000000    6.000000    2.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    74.000000    7.400000    0.000000    0.000000    -1.000000
  6 2.000000    1.000000    0.000000    0.000000    0.000000    2.000000    1.000000    3.000000    1.000000    2.000000    3.000000    2.000000    2.000000    1.000000    0.000000    3.000000    3.000000    0.000000    0.000000    0.000000    0.000000    1.000000
  7 1.000000    1.000000    37.900000    48.000000    16.000000    1.000000    1.000000    1.000000    1.000000    3.000000    3.000000    3.000000    1.000000    1.000000    0.000000    3.000000    5.000000    37.000000    7.000000    0.000000    0.000000    1.000000
  8 1.000000    1.000000    0.000000    60.000000    0.000000    3.000000    0.000000    0.000000    1.000000    0.000000    4.000000    2.000000    2.000000    1.000000    0.000000    3.000000    4.000000    44.000000    8.300000    0.000000    0.000000    -1.000000
  9 2.000000    1.000000    0.000000    80.000000    36.000000    3.000000    4.000000    3.000000    1.000000    4.000000    4.000000    4.000000    2.000000    1.000000    0.000000    3.000000    5.000000    38.000000    6.200000    0.000000    0.000000    -1.000000
 10 2.000000    9.000000    38.300000    90.000000    0.000000    1.000000    0.000000    1.000000    1.000000    5.000000    3.000000    1.000000    2.000000    1.000000    0.000000    3.000000    0.000000    40.000000    6.200000    1.000000    2.200000    1.000000
 11 1.000000    1.000000    38.100000    66.000000    12.000000    3.000000    3.000000    5.000000    1.000000    3.000000    3.000000    1.000000    2.000000    1.000000    3.000000    2.000000    5.000000    44.000000    6.000000    2.000000    3.600000    1.000000
 12 2.000000    1.000000    39.100000    72.000000    52.000000    2.000000    0.000000    2.000000    1.000000    2.000000    1.000000    2.000000    1.000000    1.000000    0.000000    4.000000    4.000000    50.000000    7.800000    0.000000    0.000000    1.000000
 13 1.000000    1.000000    37.200000    42.000000    12.000000    2.000000    1.000000    1.000000    1.000000    3.000000    3.000000    3.000000    3.000000    1.000000    0.000000    4.000000    5.000000    0.000000    7.000000    0.000000    0.000000    1.000000
 14 2.000000    9.000000    38.000000    92.000000    28.000000    1.000000    1.000000    2.000000    1.000000    1.000000    3.000000    2.000000    3.000000    0.000000    7.200000    1.000000    1.000000    37.000000    6.100000    1.000000    0.000000    -1.000000
 15 1.000000    1.000000    38.200000    76.000000    28.000000    3.000000    1.000000    1.000000    1.000000    3.000000    4.000000    1.000000    2.000000    2.000000    0.000000    4.000000    4.000000    46.000000    81.000000    1.000000    2.000000    1.000000
 16 1.000000    1.000000    37.600000    96.000000    48.000000    3.000000    1.000000    4.000000    1.000000    5.000000    3.000000    3.000000    2.000000    3.000000    4.500000    4.000000    0.000000    45.000000    6.800000    0.000000    0.000000    -1.000000
 17 1.000000    9.000000    0.000000    128.000000    36.000000    3.000000    3.000000    4.000000    2.000000    4.000000    4.000000    3.000000    3.000000    0.000000    0.000000    4.000000    5.000000    53.000000    7.800000    3.000000    4.700000    -1.000000
 18 2.000000    1.000000    37.500000    48.000000    24.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000
 19 1.000000    1.000000    37.600000    64.000000    21.000000    1.000000    1.000000    2.000000    1.000000    2.000000    3.000000    1.000000    1.000000    1.000000    0.000000    2.000000    5.000000    40.000000    7.000000    1.000000    0.000000    1.000000
 20 2.000000    1.000000    39.400000    110.000000    35.000000    4.000000    3.000000    6.000000    0.000000    0.000000    3.000000    3.000000    0.000000    0.000000    0.000000    0.000000    0.000000    55.000000    8.700000    0.000000    0.000000    1.000000
 21 1.000000    1.000000    39.900000    72.000000    60.000000    1.000000    1.000000    5.000000    2.000000    5.000000    4.000000    4.000000    3.000000    1.000000    0.000000    4.000000    4.000000    46.000000    6.100000    2.000000    0.000000    1.000000
 22 2.000000    1.000000    38.400000    48.000000    16.000000    1.000000    0.000000    1.000000    1.000000    1.000000    3.000000    1.000000    2.000000    3.000000    5.500000    4.000000    3.000000    49.000000    6.800000    0.000000    0.000000    1.000000
 23 1.000000    1.000000    38.600000    42.000000    34.000000    2.000000    1.000000    4.000000    0.000000    2.000000    3.000000    1.000000    0.000000    0.000000    0.000000    1.000000    0.000000    48.000000    7.200000    0.000000    0.000000    1.000000
 24 1.000000    9.000000    38.300000    130.000000    60.000000    0.000000    3.000000    0.000000    1.000000    2.000000    4.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    50.000000    70.000000    0.000000    0.000000    1.000000
 25 1.000000    1.000000    38.100000    60.000000    12.000000    3.000000    3.000000    3.000000    1.000000    0.000000    4.000000    3.000000    3.000000    2.000000    2.000000    0.000000    0.000000    51.000000    65.000000    0.000000    0.000000    1.000000
 26 2.000000    1.000000    37.800000    60.000000    42.000000    0.000000    0.000000    0.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    1.000000
 27 1.000000    1.000000    38.300000    72.000000    30.000000    4.000000    3.000000    3.000000    2.000000    3.000000    3.000000    3.000000    2.000000    1.000000    0.000000    3.000000    5.000000    43.000000    7.000000    2.000000    3.900000    1.000000
 28 1.000000    1.000000    37.800000    48.000000    12.000000    3.000000    1.000000    1.000000    1.000000    0.000000    3.000000    2.000000    1.000000    1.000000    0.000000    1.000000    3.000000    37.000000    5.500000    2.000000    1.300000    1.000000
 29 1.000000    1.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
 30 2.000000    1.000000    37.700000    48.000000    0.000000    2.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    1.000000    0.000000    0.000000    0.000000    45.000000    76.000000    0.000000    0.000000    1.000000
 31 2.000000    1.000000    37.700000    96.000000    30.000000    3.000000    3.000000    4.000000    2.000000    5.000000    4.000000    4.000000    3.000000    2.000000    4.000000    4.000000    5.000000    66.000000    7.500000    0.000000    0.000000    -1.000000
 32 2.000000    1.000000    37.200000    108.000000    12.000000    3.000000    3.000000    4.000000    2.000000    2.000000    4.000000    2.000000    0.000000    3.000000    6.000000    3.000000    3.000000    52.000000    8.200000    3.000000    7.400000    -1.000000
 33 1.000000    1.000000    37.200000    60.000000    0.000000    2.000000    1.000000    1.000000    1.000000    3.000000    3.000000    3.000000    2.000000    1.000000    0.000000    4.000000    5.000000    43.000000    6.600000    0.000000    0.000000    1.000000
 34 1.000000    1.000000    38.200000    64.000000    28.000000    1.000000    1.000000    1.000000    1.000000    3.000000    1.000000    0.000000    0.000000    0.000000    0.000000    4.000000    4.000000    49.000000    8.600000    2.000000    6.600000    1.000000
 35 1.000000    1.000000    0.000000    100.000000    30.000000    3.000000    3.000000    4.000000    2.000000    5.000000    4.000000    4.000000    3.000000    3.000000    0.000000    4.000000    4.000000    52.000000    6.600000    0.000000    0.000000    1.000000
 36 2.000000    1.000000    0.000000    104.000000    24.000000    4.000000    3.000000    3.000000    2.000000    4.000000    4.000000    3.000000    0.000000    3.000000    0.000000    0.000000    2.000000    73.000000    8.400000    0.000000    0.000000    -1.000000
 37 2.000000    1.000000    38.300000    112.000000    16.000000    0.000000    3.000000    5.000000    2.000000    0.000000    0.000000    1.000000    1.000000    2.000000    0.000000    0.000000    5.000000    51.000000    6.000000    2.000000    1.000000    -1.000000
 38 1.000000    1.000000    37.800000    72.000000    0.000000    0.000000    3.000000    0.000000    1.000000    5.000000    3.000000    1.000000    0.000000    1.000000    0.000000    1.000000    1.000000    56.000000    80.000000    1.000000    2.000000    1.000000
 39 2.000000    1.000000    38.600000    52.000000    0.000000    1.000000    1.000000    1.000000    1.000000    3.000000    3.000000    2.000000    1.000000    1.000000    0.000000    1.000000    3.000000    32.000000    6.600000    1.000000    5.000000    1.000000
 40 1.000000    9.000000    39.200000    146.000000    96.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    0.000000    -1.000000
 41 1.000000    1.000000    0.000000    88.000000    0.000000    3.000000    3.000000    6.000000    2.000000    5.000000    Python机器学习算法之AdaBoost算法

集成学习之随机森林案例专题Python机器学习系列(十七)

AdaBoost算法详解及python实现Python机器学习系列(十八)

机器学习-分类器-Adaboost原理

机器学习---算法---Adaboost

机器学习之Adaboost算法原理