zoukankan      html  css  js  c++  java
  • 几种Boost算法的比较(Discrete AdaBoost, Real AdaBoost, LogitBoost, Gentle Adaboost)

    关于boost算法


      boost算法是基于PAC学习理论(probably approximately correct)而建立的一套集成学习算法(ensemble learning)。其根本思想在于通过多个简单的弱分类器,构建出准确率很高的强分类器,PAC学习理论证实了这一方法的可行性。下面关于几种Boost算法的比较,是基于文章《Additive Logistic Regression a Statistical View of Boosting》整理的。

    几种boost算法步骤


      通常使用最多的应该是离散的Adaboost算法(Discrete AdaBoost),主要因为它的简单却不俗的表现,Discrete Adaboost算法的步骤如下:

      可以看出,Discrete AdaBoost的每一个弱分类的输出结果是1或-1,并没有属于某个类的概率,略显粗糙。
    如果让每个弱分类器输出样本属于某个类的概率,则可以得到Real AdaBoost算法,其步骤如下:

      Real Adaboost每个弱分类器输出样本属于某类的概率后,通过一个对数函数将0-1的概率值映射到实数域,最后的分类器是所有映射函数的和。

    将Real Adaboost算法每次迭代的两部合并,直接产生一个映射到实数域的函数,则就成了Gentle AdaBoost, 其算法步骤如下:

      Gentle AdaBoost则在每次迭代时,基于最小二乘去做一个加权回归,最后所有回归函数的和作为最终的分类器。

      LogitBoost算法则和Gentle AdaBoost算法有点相像,不过其每次进行回归拟合的变量z是在不断更新的,Gentle AdaBoost使用的是y。LogitBoost算法步骤如下:

    4种boost算法的原理差异


      上面4中boost算法,其大体结构都是比较相似的,那么是如何推导出每种算法的具体形式的呢?
      首先是关于损失函数(或代价函数),通常见到比较多的是均方误差和似然函数,而上面的算法中,Discrete AdaBoost、Real AdaBoost和Gentle AdaBoost算法都是采用对数损失函数,具体形式如下:
    egin{aligned} J(F) = Ee^({-yF(x)}) end{aligned}
      其表达的意义实质上与分类错误个数是相同的。
      而Logit Boost算法则采用最大化对数似然函数来推导的。
      第二点是具体优化方法,Discrete AdaBoost与Real AdaBoost主要通过类似梯度下降的方法来优化,而Gentle AdaBoost与Logit Boost都是采用类似牛顿迭代的方式优化的。

    算法的效果差异


      在前面提到的参考文章中,对几种算法的效果进行了大量比较,大致如下;

    1. 整体效果而言,效果由好到差的顺序为Logit Boost,Gentle AdaBoost, Real AdaBoost, Discrete AdaBoost
    2. 若弱分类器采用树桩模型(也就是只要2个叶子节点的决策树),Discrete AdaBoost的结果比其他3种算法结果差了很多,大概是由于系统偏差过大导致的泛化误差较大
    3. 若弱分类器采用多层的决策树(4或8个叶子节点),Discrete AdaBoost的结果能有较大提升,而其他3种算法则差异不大。

      平时我们所用的AdaBoost算法大多是Discrete AdaBoost,从这里可以看出Discrete AdaBoost算法模型相对比较简单,需要弱分类器的精确度稍高,因此在具体应用时最好将每个弱分类器的叶子节点控制在4个或8个。
      关于Boost算法还有很多比较有趣的结论,这里不多讲,可以参考上面的那篇Paper。

  • 相关阅读:
    k64 datasheet学习笔记26--Oscillator (OSC)
    k64 datasheet学习笔记22---Direct Memory Access Controller (eDMA)
    k64 datasheet学习笔记21--Direct Memory Access Multiplexer (DMAMUX)
    System.getProperty()获取系统的配置信息
    Zoomit的用法总结
    .bat文件调用java类的main方法
    电脑快捷键总结
    验证java引用的小例子
    java随机数
    java调用删除文件的方法删除文件,却删除不干净
  • 原文地址:https://www.cnblogs.com/jcchen1987/p/4581651.html
Copyright © 2011-2022 走看看