定义
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。
基于数据集多重抽样的分类器
我们可以将不同的分类器组合起来,而这种组合结果则被称为继承方法或者元算法。使用集成方法时会有多种形式:可以是不同算法的集成,也可以是同一算法在不同设置下的集成,还可以是数据集不同部分分配给不同分类器之后的集成。下面介绍两种方法。
bagging:基于数据随机重抽样的分类器构建方法
自举汇聚法,也成为bagging方法,是在从原始数据集选择S次后得到S个新数据集的一种技术。新数据集和原数据集的大小相等。每个数据集都是通过在原始数据集中随机选择一个样本来进行替换而得到的(原理是从原始集合中随机选择一个样本,让后随机选择一个样本来代替这个样本)。这里的替换就意味着可以多次选择同一样本。
在S个数据集建立好之后,将某个学习算法分别作用于每个数据集就得到了S个分类器。当我们要对新数据进行分类时,就可以应用这S个分类器进行分类。与此同时,选择分类器投票结果中最多的类别作为最后的结果。
boosting
boosting是一种与bagging类似的技术。所使用的多个分类器的类型都是一致的。在bagging中,不同的分类器是通过串行训练获得的,每个新分类器都根据已经训练出的分类器的性能来进行训练。boosting是通过集中关注被已有分类器错分的那些数据来获得新的分类器。
算法原理
AdaBoost是adaptive boosting(自适应boosting)的缩写,其运行过程如下:训练数据中的每一个样本,并赋予其一贯权重,这些权重构成了向量 D \bm{D} D。一开始,这些权重都被初始化成相同的值。首先在训练数据上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器。在分类器的第二次训练中,将会重新调整每个样本的权重,其中第一次分对的样本的权重将会降低,而第一次分错的样本的权重将会升高。为了从所有弱分类器中得到最终的分类结果,AdaBoost为每个分类器都分配了一个权重 α \alpha α,这些 α \alpha α是基于每个弱分类器的错误率计算的。其中错误率 ε \varepsilon ε的定义为:
ε = 未 正 确 分 类 的 样 本 数 目 所 有 样 本 数 目 \varepsilon=\frac{未正确分类的样本数目}{所有样本数目} ε=所有样本数目未正确分类的样本数目
而 α \alpha α的计算公式如下:
α = 1 2 ln ( 1 − ε ε ) \alpha=\frac{1}{2}\ln{(\frac{1-\varepsilon}{\varepsilon})} α=21ln(ε1−ε)
计算出 α \alpha α值之后,可以对权重向量进行更新,可以使那些被正确分类的样本权重降低而没有分类正确的样本权重升高。 D \bm{D} D的计算方法如下。
若某个样本被正确分类,那么该样本的权重更新为:
D i ( i + 1 ) = D i ( i ) e − α S u m ( D ) \bm{D_{i}^{(i+1)}=\frac{\bm{D_{i}^{(i)}e^{-\alpha}}}{\mathrm{Sum}(\bm{D})}} Di(i+1)=Sum(D)Di(i)e−α
若某个样本被错误分类,那么该样本的权重更新为:
D i ( i + 1 ) = D i ( i ) e α S u