Boost算法拓展---几种Boost方法

来源:互联网 发布:如何删除mac下载程序 编辑:程序博客网 时间:2024/06/05 19:37

前言

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

discrete AdaBoost

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

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

Real AdaBoost

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

将Real AdaBoost算法每次迭代的两部分合并,直接产生一个映射到实数域的函数,则就成了Gentle AdaBoost。

Gentle AdaBoost

其算法步骤如下:

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

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

LogitBoost

LogitBoost算法步骤如下:


以上各种Boost算法的原理差异

上面4中boost算法,其大体结构都是比较相似的,那么是如何推导出每种算法的具体形式的呢?

  首先是关于损失函数(或代价函数),通常见到比较多的是均方误差和似然函数,而上面的算法中,Discrete AdaBoost、Real AdaBoost和Gentle AdaBoost算法都是采用对数损失函数,具体形式如下:
  

其表达的意义实质上与分类错误个数是相同的。

而Logit Boost算法则采用最大化对数似然函数来推导。

第二点是具体优化方法,Discrete AdaBoost与Real AdaBoost主要通过类似梯度下降的方法来优化,而Gentle AdaBoost与Logit Boost都是采用类似牛顿迭代的方式优化的。


算法的效果差异

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

  • 整体效果而言,效果由好到差的顺序为Logit Boost,Gentle AdaBoost, Real AdaBoost, Discrete AdaBoost。

  • 若弱分类器采用树桩模型(也就是只要2个叶子节点的决策树),Discrete AdaBoost的结果比其他3种算法结果差了很多,大概是由于系统偏差过大导致的泛化误差较大。

  • 若弱分类器采用多层的决策树(4或8个叶子节点),Discrete AdaBoost的结果能有较大提升,而其他3种算法则差异不大。

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

其实本节几乎来来自于[本篇文章]。为什么自己又写在自己博客里面,主要是为了节省搜索时间,方便学习。

《完》

所谓的不平凡就是平凡的N次幂。                    ------By Ada
原创粉丝点击