zoukankan      html  css  js  c++  java
  • SIGAI机器学习第二十集 AdaBoost算法1

    讲授Boosting算法的原理,AdaBoost算法的基本概念,训练算法,与随机森林的比较,训练误差分析,广义加法模型,指数损失函数,训练算法的推导,弱分类器的选择,样本权重削减,实际应用

    AdaBoost算法将用三节课来讲,ANN、SVM、AdaBoost这三种算法都是用三节课来讲,因为这三种算法都非常重要,都有一些成功的应用。AdaBoost和SVM一样整个理论的根基是非常完善的,而且他们都是从1995年左右开始出现,在出现的十几年里边他们都得到了成功的应用。

    随即森林它是一种称为Bagging集成学习算法的具体的一种实现,而AdaBoost它是Boosting算法的一种具体的实现。

    大纲:

    再论集成学习算法
    Boosting算法简介
    AdaBoost算法简介
    训练算法
    训练算法的解释
    与随机森林的比较
    训练误差分析

    再论集成学习算法:

    集成学习它是整个机器学习里边的一种思想,而不是某一种具体的算法,它有很多种不同的实现,比如说随机森林、AdaBoost,都是集成学习算法具体的实现。

    集成学习的精髓:是一种思想,而不是一种具体的算法,有多种不同的实现方案。预测时,依靠多个弱学习器进行预测,投票,加权。训练时,要用原始的训练集构造每个弱学习器的训练集,采样,加权。

    典型实现:Bagging与Boosting。

    把一些不靠谱精度不是很高的模型,组合起来,能形成一个精度大有提升的一个模型,这是集成学习一个最根本的思想。
    Boosting算法简介:

    Boosting算法采用了随机采样。
    训练算法:每次训练一个弱分类器时,有一部分样本是被上一个弱分类器错分的,这样使得后面的弱分类器重点关注难分的样本。

    预测算法:和随机森林是一样的,最后的预测结果是各个弱分类器的预测结果投票。

    AdaBoost算法简介:

    全称是Adaptive Boosting,自适应提升算法,是一种二分类算法,只能用于分类问题,是Boosting算法的一种实现。

    用弱分类器的线性组合来构造强分类器,预测的时候根据强分类器来预测。

    弱分类器不用太精确,只要保证准确率大于0.5即可,即比随机猜测要强。
    弱分类器的准确率是可以保证的,对于二分类问题,如果准确率低于0.5,只要将预测结果反转即可。
    样本标签值为+1和-1。

    强分类器:其中,at是一个加权系数,at、ft(x)都是通过训练算法来确定的,T通过实验、人为的经验或其他判断条件来确定的。

    最后用一个符号函数来做分类 :sgn(F(x)),符号函数,大于0为+1,小于0为-1。

    训练算法:

    要解决的核心问题:弱分类器,弱分类器权重。

    给定l个训练样本(xi,yi),其中Xi是特征向量,yi为类别标签,其值为+1或-1。初始化样本权重值,所有样本的初始权重(弱分类器是有权重a的,训练样本也是有权重的,这是AdaBoost算法的一个显著特征)相等:wi0=1/l, i=1,...,l,其中0表示迭代次数下标,i表示第i个样本。
    循环,对t=1,...,T依次训练每个弱分类器:

      即第t个弱分类器更加注重对被第t-1个弱分类器错分的样本(对应的样本权重大),而且如果第t个弱分类器分类效果好即分类误差小则该分类器对应的权重就大。

    T次循环完之后就得到整个输出的模型(T个弱分类器的组合):

    整个算法分两个阶段:

    1、初始化阶段

    2、核心阶段,又分为三小步

    训练算法的解释:

    根据弱分类器的条件et<0.5,可以保证:(1-et)/et>1,从而保证弱分类器的权重是正数。

    对于正确分类的样本的相对权重会降低,对于错误分类的样本的权重会升高。

    在不考虑归一化因子Zt的情况下,被正确分类的样本乘的是一个小于1的数,而被错误分类的样本乘的是一个大于1的数。

    被上一个弱分类器错误分类的样本权重会增大,正确分类的样本权重减小,训练下一个弱分类器时算法会关注在上一轮中被错分的样本。

    形象的比喻:在每次考试之后会调整学习的重点,本次考试做对的题目下次不再重点学习;而对于做错的题目下次要重点学习这些知识点。

    给样本加权重是有必要的,如果样本没有权重,每个弱分类器的训练样本是相同的(因为训练的时候没有采用随机抽样),训练出来的弱分类器也是一样的,这样训练多个弱分类器没有意义,这也是整个AdaBoost算法一个比较高明的地方。

    AdaBoost算法的精髓:
    关注之前被错分的样本,准确率高的弱分类器有更大的权重

    问题:弱分类器是什么样的?

    一般用决策树做弱分类器,但是作为弱分类器有两个原则计算简单(因此准确率不用太高);非线性(因为强分类器是所有弱分类器的线性线性求和,如果每个弱分类器都是线性函数,那么不管怎么加权最终还是一个线性函数,因此它的建模能力有限,所以我们的弱分类器一定要是非线性的。)

    与随机森林的比较:

    二者都是集成学习算法,而且AdaBoost一般是用决策树做弱分类器,一般来说他们都是树的集成,这是他们比较像的地方。

    根本区别:AdaBoost算法给样本加权(没有做随机采样,每个弱分类器权重是不一样的),随机森林从样本集随机采样(所有弱分类器的权重是一样的)。

     随机森林要求树的深度要比较大,把每个弱学习器当作一个决策树对待;AdaBoost算法要求深度比较小,如深度为1的决策树,最后加权之后,效果照样非常好。

    标准的AdaBoost算法是二分类算法。

    训练误差分析:

    随着迭代的进行(随着弱分类器的增多),强分类器的训练误差(在整个样本集上)会以指数级下降。即训练出来的弱分类器越多我们的强分类器越准,而且错误率是呈指数级下降的。

    整个证明过程比较复杂,分两个阶段来证明:

    ①证明随着迭代进行,强分类器的误差下降。

    强分类器在训练样本集上的错误率上界小于每一轮调整样本权重时权重归一化因子的乘积:

    其中perror是强分类器F(xi)在整个样本集上的错误率,[[]]表示里边的条件成立则输出1否则输出0。F(xi)输出是一个实数值不是整数值。

     由于Zt<1,所以只要①式成立,则可以说明随着迭代进行,强分类器的误差下降。①式怎么证明成立呢?

    分为两步:

    首先证明下面的不等式成立:

    证明过程:

    然后再证明:

    ②证明随着迭代进行,强分类器的误差呈指数下降。

    怎么证明呢?只需证明perror小于一个指数函数即可。

    证明过程:

     

  • 相关阅读:
    Java实现 蓝桥杯 算法提高 扶老奶奶过街
    Java实现 蓝桥杯 算法提高 扶老奶奶过街
    RichEdit选中文字右键菜单的实现
    避免用户重复点击按钮(使用Enable:=False,消息繁忙时会有堵塞的问题,只能改用Sleep)
    枚举当前系统用户(使用NetUserEnum API枚举)
    通过Graphics对象获取它所属的Control
    Delphi中动态调用TXMLDocument的经历
    MongoDB集群
    瀑布流特效
    常用优化策略
  • 原文地址:https://www.cnblogs.com/wisir/p/12043545.html
Copyright © 2011-2022 走看看