《机器学习实战》 第七章 adaboost元算法 学习总结

       boosting算法和bagging算法都是把一些弱分类器组合起来来进行分类的方法,统称为集成方法(ensemble method)或元算法。boosting是集中关注分类器错分的那些数据来获得新的分类器,分类的结果是基于所有分类器的加权求和结果的。在bagging中分类器权重相等,而boosting中分类器的权值并不相等,每个权重代表的是其对应分类器在上一轮迭代中的成功度。分类器的错误率越低,那么其对应的权重也就越大,越容易对预测结果产生影响。

      boosting方法的代表分类器为adaboost。Adaboost是一种组合算法,依赖于原有的分类器,以若干个弱分类器为基础来构建强分类器。弱分类器意味着分类器的性能不会太好,在二分类情况下的错误率会低于50%。其实任意的分类器都可以做为弱分类器,比如之前书中介绍的KNN、决策树、logiostic回归和SVM等。本章采用的弱分类器是单层决策树,它是一个单节点的决策树。它是adaboost中最流行的弱分类器。强分类器的分类错误率相对而言就要小很多,adaBoost算法就是依赖这些弱分类器的组合最终完成分类预测的。

      Adaboost的运行过程:训练数据的每一个样本,并赋予其一个权重,这些权值构成权重向量D,维度等于数据集样本个数。开始时,这些权重都是相等的,首先在训练数据集上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器,但是在第二次训练时,将会根据分类器的错误率,对数据集中样本的各个权重进行调整,分类正确的样本的权重降低,而分类错的样本权重则上升,但这些权重的总和保持不变为1。并且,最终的分类器会基于这些训练的弱分类器的分类错误率,分配不同的决定系数alpha,错误率低的分类器获得更高的决定系数,从而在对数据进行预测时起关键作用。

       也就是说,Adaboost不断的对同样的数据使用同一个分类器进行分类,直到所有的数据都分类完毕,或是达到迭代的次数为止。这是一个串行训练的过程,在每个迭代过程中,分类器和数值的权重都不一样,下次的权重会依赖于当前分类器的分类结果。对于分类器分类正确的数据减小它的权值,相反对于分类器分错的数据增大它的权值,这样使得我们在下次的分类过程中更加关注那些被分错的数据。

算法流程如下:


其中,左边是数据集,直方图的不同宽度表示每个样例上的不同权重。在经过一个分类器后,加权的预测结果会通过三角形中的alpha值进行加权。每个三角形中输出的加权结果在圆形中求和,从而得到最终的输出结果。

1、构建弱分类器

       在本书中,使用单层决策树构建弱分类器。单层决策树可以看做是由一个根节点直接连接两个叶结点的简单决策树,仅基于一个特征来做决策。单层决策树的伪代码如下:
将minError设置为无穷大
对数据集中的每一个属性
    对每个步长(第二层循环):
        对每个不等号:
            建立一棵单层决策树并利用加权数据集对其进行测试
            如果错误率低于minError,则将当前的决策树设为最佳单层决策树

返回最佳单层决策树

在此处,评价的标准不再是熵,而是加权的错误率。

2、构建Adaboost

       根据得到的弱分类器,构造adaboost,伪代码如下:

对每次迭代:
    利用buildStump找到最佳的单层决策树
    将最佳单层决策树加入数组
    计算分类器系数alpha
    计算新的权重D
    更新累计类别估计值

    如果错误率为0.0,跳出循环

在这里,需要注意的一点是:假定我们设置迭代次数为9,但算法在第4次迭代后错误率已经为0,那么程序自动退出迭代过程,此时不需要执行所有的9次迭代过程。



猜你喜欢

转载自blog.csdn.net/wanty_chen/article/details/79961176
今日推荐