《机器学习实战》 第七章 adaboost元算法 学习总结

原创 2018年04月16日 16:04:46

       boosting算法和bagging算法都是把一些弱分类器组合起来来进行分类的方法,统称为集成方法(ensemble method)或元算法。boosting是集中关注分类器错分的那些数据来获得新的分类器,分类的结果是基于所有分类器的加权求和结果的。在bagging中分类器权重相等,而boosting中分类器的权值并不相等,每个权重代表的是其对应分类器在上一轮迭代中的成功度。分类器的错误率越低,那么其对应的权重也就越大,越容易对预测结果产生影响。

      boosting方法的代表分类器为adaboost。Adaboost是一种组合算法,依赖于原有的分类器,以若干个弱分类器为基础来构建强分类器。弱分类器意味着分类器的性能不会太好,在二分类情况下的错误率会低于50%。其实任意的分类器都可以做为弱分类器,比如之前书中介绍的KNN、决策树、logiostic回归和SVM等。本章采用的弱分类器是单层决策树,它是一个单节点的决策树。它是adaboost中最流行的弱分类器。强分类器的分类错误率相对而言就要小很多,adaBoost算法就是依赖这些弱分类器的组合最终完成分类预测的。

      Adaboost的运行过程:训练数据的每一个样本,并赋予其一个权重,这些权值构成权重向量D,维度等于数据集样本个数。开始时,这些权重都是相等的,首先在训练数据集上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器,但是在第二次训练时,将会根据分类器的错误率,对数据集中样本的各个权重进行调整,分类正确的样本的权重降低,而分类错的样本权重则上升,但这些权重的总和保持不变为1。并且,最终的分类器会基于这些训练的弱分类器的分类错误率,分配不同的决定系数alpha,错误率低的分类器获得更高的决定系数,从而在对数据进行预测时起关键作用。

       也就是说,Adaboost不断的对同样的数据使用同一个分类器进行分类,直到所有的数据都分类完毕,或是达到迭代的次数为止。这是一个串行训练的过程,在每个迭代过程中,分类器和数值的权重都不一样,下次的权重会依赖于当前分类器的分类结果。对于分类器分类正确的数据减小它的权值,相反对于分类器分错的数据增大它的权值,这样使得我们在下次的分类过程中更加关注那些被分错的数据。

算法流程如下:


其中,左边是数据集,直方图的不同宽度表示每个样例上的不同权重。在经过一个分类器后,加权的预测结果会通过三角形中的alpha值进行加权。每个三角形中输出的加权结果在圆形中求和,从而得到最终的输出结果。

1、构建弱分类器

       在本书中,使用单层决策树构建弱分类器。单层决策树可以看做是由一个根节点直接连接两个叶结点的简单决策树,仅基于一个特征来做决策。单层决策树的伪代码如下:
将minError设置为无穷大
对数据集中的每一个属性
    对每个步长(第二层循环):
        对每个不等号:
            建立一棵单层决策树并利用加权数据集对其进行测试
            如果错误率低于minError,则将当前的决策树设为最佳单层决策树

返回最佳单层决策树

在此处,评价的标准不再是熵,而是加权的错误率。

2、构建Adaboost

       根据得到的弱分类器,构造adaboost,伪代码如下:

对每次迭代:
    利用buildStump找到最佳的单层决策树
    将最佳单层决策树加入数组
    计算分类器系数alpha
    计算新的权重D
    更新累计类别估计值

    如果错误率为0.0,跳出循环

在这里,需要注意的一点是:假定我们设置迭代次数为9,但算法在第4次迭代后错误率已经为0,那么程序自动退出迭代过程,此时不需要执行所有的9次迭代过程。



GBA 开发简单入门

GBA 开发简单入门by Xkinhttp://airgl.myrice.com 一. GBA开发包--DevKitAdv 简介 DevKitAdv 主要包括两部分,一是GCC++编译器,二是 GBA...
  • wagxu
  • wagxu
  • 2002-11-22 14:00:00
  • 2136

《机器学习实战》7:Adaboost

已经有三个月的时间没有写博文了,书倒是一直在看。实战看完了,看大数据,大数据看的差不多了,最近开始看《统计学习方法》,就是没有很好的记录下来,惭愧......   之前的几章都讲的是具体的分类器,...
  • zoufangyingzi
  • zoufangyingzi
  • 2014-12-22 11:21:57
  • 1366

py2.7 : 《机器学习实战》 Adaboost 2.24号:ROC曲线的绘制和AUC计算函数

前言:可以将不同的分类器组合,这种组合结果被称为集成方法  、 元算法 使用:1.不同算法的集成 2.同一算法下的不同设置集成 3.不同部分分配给不同分类器的集成 算法介绍:AdaBoost 优点:泛...
  • qq_33638791
  • qq_33638791
  • 2017-02-21 17:17:13
  • 782

机器学习实战笔记7(Adaboost)

1:简单概念描述        Adaboost是一种弱学习算法到强学习算法,这里的弱和强学习算法,指的当然都是分类器,首先我们需要简单介绍几个概念。 1:弱学习器:在二分情况下弱分类器的错误率会高于...
  • Lu597203933
  • Lu597203933
  • 2014-08-18 21:26:57
  • 8951

《机器学习实战》AdaBoost算法的分析与实现

=====================================================================   《机器学习实战》系列博客是博主阅读《机器学习实战》这本书...
  • Gamer_gyt
  • Gamer_gyt
  • 2016-05-11 10:41:52
  • 6753

《机器学习实战》学习笔记:利用Adaboost元算法提高分类性能

Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器,比起弱分类器,这个“强”分类器的错误率会低很多。...
  • liyuefeilong
  • liyuefeilong
  • 2015-10-08 22:30:23
  • 2591

【机器学习实战-python3】Adaboost元算法提高分类性能

工具:PythonCharm 书中的代码是python2的,而我用的python3,结合实践过程,这里会标注实践时遇到的问题和针对python3的修改。 实践代码和训练测试数据可以参考这里 h...
  • sinat_17196995
  • sinat_17196995
  • 2017-03-16 21:46:09
  • 963

机器学习之AdaBoost元算法(七)

主要内容: ● 组合相似的分类器来提高分类器性能 ● 应用AdaBoost算法 ● 处理非均衡问题分类问题打个比方, 做重要决定的时候, 大家可能会汲取多个专家而不是一个人的意见。机...
  • lingan_Hong
  • lingan_Hong
  • 2017-09-25 09:42:24
  • 381

机器学习(20)之Adaboost算法原理小结

微信公众号 关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 前言 在(机器学习(17)之集成学习原理总结)中,...
  • Mbx8X9u
  • Mbx8X9u
  • 2017-10-12 00:00:00
  • 312

机器学习经典算法详解及Python实现--元算法、AdaBoost

AdaBoost算法有AdaBoost.M1和AdaBoost.M2两种算法,AdaBoost.M1是我们通常所说的Discrete AdaBoost,而AdaBoost.M2是M1的泛化形式。关于A...
  • suipingsp
  • suipingsp
  • 2014-12-04 12:57:52
  • 16696
收藏助手
不良信息举报
您举报文章:《机器学习实战》 第七章 adaboost元算法 学习总结
举报原因:
原因补充:

(最多只允许输入30个字)