一、Boosting算法基本思路
提升方法基于这样 一种 思想: 对于 一个复杂 任务 来说, 将多个专家的判断进行适当的综合所得出的判断,要比 其中任何一个专家单独的判断好。 实际上,就是“ 三个臭皮匠顶个诸葛亮” 的道理。
对于分类问题而言, 给定一个训练集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易得多。Boosting方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称基本分类器),然后组合这些弱分类器,构成一个强分类器。
对于Boosting方法来说,需要回答两个问题:
- 第一个问题:每一轮如何改变训练数据的权值或者概率分布
- 第二个问题:如何将弱分类器组合成一个强分类器
二、AdaBoost算法
boosting 方法拥有多个版本,其中最流行的一个版本就是AdaBoost,即adaptive boosting.
对与上面提到的两个问题,AdaBoost的做法分别是:
- 对于第一个问题:提高那些被前一轮弱分类器错误分类的样本的权值,而降低那些被正确分类样本的权值.
- 对于第二个问题:采取加权多数表决的方法,具体就是,加大分类误差率较小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用.
具体算法流程描述如下:
假定给定一个二分类的训练数据集
算法在每次迭代都会更新样本的分布权重,在下一次迭代前会根据进行一次训练样本的重采样。
即,如下图流程所示:
简单来说,Adaboost有很多优点:
- adaboost是一种有很高精度的分类器
- 可以使用各种方法构建子分类器,adaboost算法提供的是框架
- 当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单
- 简单,不用做特征筛选
- 不用担心overfitting!
总之:adaboost是简单,有效。
下面我们举一个简单的例子来看看adaboost的实现过程:
图中,“+”和“-”分别表示两种类别,在这个过程中,我们使用水平或者垂直的直线作为分类器,来进行分类。
Step 1:
根据分类的正确率,得到一个新的样本分布,一个子分类器
其中划圈的样本表示被分错的。在右边的途中,比较大的“+”表示对该样本做了加权。
Step 2:
根据分类的正确率,得到一个新的样本分布,一个子分类器
Step 3:
得到一个子分类器
整合所有子分类器:
因此可以得到整合的结果,从结果中看,及时简单的分类器,组合起来也能获得很好的分类效果,在例子中所有的。
Adaboost算法的某些特性是非常好的,在我们的报告中,主要介绍adaboost的两个特性。
一是训练的错误率上界,随着迭代次数的增加,会逐渐下降;
-
二是adaboost算法即使训练次数很多,也不会出现过拟合的问题。
AdaBoost的优点:泛化错误率低,可以用在大部分分类器上,无参数调整(自适应).
缺点:对离群点敏感.
AdaBoost 算法还有另一个 解释, 即可以认为 AdaBoost 算法是模型为加法模型、 损失函数为指数函数、 学习算法为前向分步算法时的二类分类学习方法。
三、Boosting Tree(提升树)
提升树是以 分类树 或 回归树 为基本分类器的提升方法。 提升树被认为是统计学习中性能最好的方法之一。
提升方法实际采用加法模型( 即基函数的线性组合)与前向分步算法。 以决策树为基函数的提升方法称为提升树( boosting tree)。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。
四、Grident Boosting Tree(梯度提升树)
提升树利用加法模型与前向分歩算法实现学习的优化过程。 当损失函数是平方损失和指数损失函数时, 每一 步 优化是很简单的。 但对 一般损失函数而言, 往往每一步优化并不那么容易。 针对这一问题, Freidman 提出了 梯度提升( gradient boosting) 算法。它将问题转变成在损失函数梯度上寻找下降最快的方向,近似地求解。
五、AdaBoost多分类问题
详细介绍,请看李航的《统计学习方法》 第8章 提升方法