一、Boosting算法基本思路

​ 提升方法基于这样 一种 思想: 对于 一个复杂 任务 来说, 将多个专家的判断进行适当的综合所得出的判断,要比 其中任何一个专家单独的判断好。 实际上,就是“ 三个臭皮匠顶个诸葛亮” 的道理。

​ 对于分类问题而言, 给定一个训练集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易得多。Boosting方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称基本分类器),然后组合这些弱分类器,构成一个强分类器。

对于Boosting方法来说,需要回答两个问题:

  • 第一个问题:每一轮如何改变训练数据的权值或者概率分布
  • 第二个问题:如何将弱分类器组合成一个强分类器

二、AdaBoost算法

boosting 方法拥有多个版本,其中最流行的一个版本就是AdaBoost,即adaptive boosting.

对与上面提到的两个问题,AdaBoost的做法分别是:

  • 对于第一个问题:提高那些被前一轮弱分类器错误分类的样本的权值,而降低那些被正确分类样本的权值.
  • 对于第二个问题:采取加权多数表决的方法,具体就是,加大分类误差率较小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用.

具体算法流程描述如下:

假定给定一个二分类的训练数据集

集成学习之 boosting

算法在每次迭代都会更新样本的分布权重Dm,在下一次迭代前会根据Dm进行一次训练样本的重采样

即,如下图流程所示:

集成学习之 boosting

简单来说,Adaboost有很多优点:

  • adaboost是一种有很高精度的分类器
  • 可以使用各种方法构建子分类器,adaboost算法提供的是框架
  • 当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单
  • 简单,不用做特征筛选
  • 不用担心overfitting!

总之:adaboost是简单,有效。

下面我们举一个简单的例子来看看adaboost的实现过程:

集成学习之 boosting

图中,“+”和“-”分别表示两种类别,在这个过程中,我们使用水平或者垂直的直线作为分类器,来进行分类。

Step 1:

集成学习之 boosting

根据分类的正确率,得到一个新的样本分布D2­,一个子分类器 h1

其中划圈的样本表示被分错的。在右边的途中,比较大的“+”表示对该样本做了加权。

Step 2:

集成学习之 boosting

根据分类的正确率,得到一个新的样本分布D3,一个子分类器 h2

Step 3:

集成学习之 boosting

得到一个子分类器 h3

整合所有子分类器:

集成学习之 boosting

​ 因此可以得到整合的结果,从结果中看,及时简单的分类器,组合起来也能获得很好的分类效果,在例子中所有的。

Adaboost算法的某些特性是非常好的,在我们的报告中,主要介绍adaboost的两个特性。

  • 一是训练的错误率上界,随着迭代次数的增加,会逐渐下降;

  • 二是adaboost算法即使训练次数很多,也不会出现过拟合的问题。

AdaBoost的优点:泛化错误率低,可以用在大部分分类器上,无参数调整(自适应).

缺点:对离群点敏感.

AdaBoost 算法还有另一个 解释, 即可以认为 AdaBoost 算法是模型为加法模型损失函数为指数函数学习算法为前向分步算法时的二类分类学习方法。

三、Boosting Tree(提升树)

提升树是以 分类树 或 回归树 为基本分类器的提升方法。 提升树被认为是统计学习中性能最好的方法之一。

提升方法实际采用加法模型( 即基函数的线性组合)与前向分步算法。 以决策树为基函数的提升方法称为提升树( boosting tree)。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。

四、Grident Boosting Tree(梯度提升树)

提升树利用加法模型与前向分歩算法实现学习的优化过程。 当损失函数是平方损失和指数损失函数时, 每一 步 优化是很简单的。 但对 一般损失函数而言, 往往每一步优化并不那么容易。 针对这一问题, Freidman 提出了 梯度提升( gradient boosting) 算法。它将问题转变成在损失函数梯度上寻找下降最快的方向,近似地求解。

五、AdaBoost多分类问题

集成学习之 boosting

详细介绍,请看李航的《统计学习方法》 第8章 提升方法

相关文章: