首页 > 代码库 > 统计学习方法--提升方法adaBoost算法(集成学习)

统计学习方法--提升方法adaBoost算法(集成学习)

1、主要内容

  介绍集成学习,然后讲述boosting和bagging的区别与联系,同时对adaBoost进行推导然后进行gbdt的推导,最后比较随机森林和gdbt的区别和联系。

2、集成学习

  集成学习(ensamble learning)通过构建多个学习器来完成任务。集成学习的一般结构:先产生一组“个体学习器”,然后再用某种策略将这些个体学习器进行联系起来,个体学习器由现有的一个算法产生,比如说c4.5决策树,bp神经网络等。根据集成学习中个体学习器是否相同可以分为同质集成和已质集成,同质集成中个体学习器被称为“基学习器”,已质集成中的个体学习器称为“组件学习器”。

  集成学习通过使用多个学习器进行组合获得强大的功能,通常个体学习器为弱分类器:分类结果不是太好但是要比随机猜测的预测结果好(精度高于50%)。目前集成学习的生成方式有两类:

  1)、boosting:个体学习器之间存在强烈的依赖关系,只能进行串行生成不同的个体学习器,以adaboost和gdbt为代表

  2)、bagging:个体学习器独立生成,互相之间没有关系,以随机森林为代表

3、boosting 和 bagging

  boosting的工作机制:从初始训练数据集出发训练出一个基学习器,然后再根据基学习器的表现对训练的样本进行调整,使得先前基学习器中学习结果错误的样本权重提升获得更大的关注,然后使用调整后的训练样本进行训练下一个基学习器,如此重复直到产生足够数量的基学习器。

  bagging的工作机制:都训练样本进行又放回的抽样(bootstrap sampling)产生和训练数据规模相同的新的训练数据,重复动作产生N个训练样本,然后使用这N个样本数据进行分别训练基学习器,基学习器之间没有关系,相互独立。

4、adaboost算法

  输入:训练数据集 T={(x1,y1),(x2,y2),...,(xN,yN)}; 其中xy = {-1, +1};弱分类器算法

  输出:最终分类器G(x),此处得到的是一个分类器

  (1)、初始化训练数据的分布权重

    D1 = {w11,w12,....,w1i,.....,w1N}, i = 1,2,3, ..... , N

    w1i = 1/N

  (2)、对于要生成M个基学习器,则对于m = 1,2,.....,M:

  (a)、使用具有权重分布Dm的训练数据进行生成基学习器:

    技术分享

  (b)、计算Gm(x)在训练数据集上的分类误差率:

    技术分享

  关于这个误差率计算的问题,针对不同的问题有不同的计算方法,此处为分类器的计算方法,上式还可以写为:

    技术分享

  这个表达式就表明了计算分类错误率时就是被Gm(x)误分类样本的权重之和,从这个关系上可以看出分类误差率和样本权重之间的关系。在此处,实际工程中需要判断以下误差率是否小于0.5,如果小于则表示这个基学习器还不如随机预测的结果,如果加入到最终分类器中会严重影响分类器的性能需要抛弃该学习器。

  (c)、计算基学习器Gm(x)的系数

    技术分享

  基学习器Gm(x)的系数就是这个学习器正确分类的概率除以分错概率的对数值的一半。当em越小时αm也就越大,也就是说分类误差率越小的分类器在最终的分类器中的作用就越来越大,也是保证了最终分类器性能强劲的原因。同时如果 em 》0.5的话,结果小于0.这是不允许的,这就是上面要抛弃掉分类误差大于0.5的学习器的原因。

  (d)、更新训练数据集的权重分布

    技术分享

 

    技术分享

 

   其中Zm为:

  技术分享

  从更新权重值的公式可以看出,正确分类的样本数据的权重减小了(e-am < 1),同样错误分类的样本的权重变大了,因此错误样本在下一轮的训练中会被重视,如果这个样本还是算错那么误差率必然会很大,因为必然会导致基学习器变换分类策略使得误差率变小,通过更新权重避免了改变训练数据,使不同的训练数据在基学习器的学习过程中起到不同的作用,这是adaBoost的一个特点。

  (3)、构建基本分类器的线性组合

    技术分享

  得到最终的分类器:

  技术分享

  需要注意的是这里的αm的和并不等于1,表示每个分类器的重要程度,f(x)的符号表明了x的类别,|f(x)|表示分类的确信度,越大分类结果越可靠。

   对于adaBoost的回归情况分析,以下内容来自http://www.cnblogs.com/pinard/p/6133937.html

  回归问题与分类问题算法的不同点在于误差率计算的方式不同,分类问题一般都采用0/1损失函数,而回归问题一般都是平方损失函数或者是线性损失函数,因此此处会有较大的不同。

  对于第k个弱学习器,计算他在训练集上的最大误差:

  技术分享技术分享

  然后计算每个样本的相对误差结果:

  技术分享

  此处使用的是线性误差的情况,如果是平方误差,则

  技术分享

  如果采用指数误差函数那么:

  技术分享

  最终得到第k个弱学习器的误差率:

  技术分享

  有了误差率后看学习器的权重系数的计算:

  技术分享

  计算完学习器的权重系数后更芯样本权重Dm+1

  技术分享

  最后进行线性组合:

  技术分享

 

  同时其他的adaBoost的算法可以参考:http://www.cnblogs.com/jcchen1987/p/4581651.html

  

  这里对Adaboost算法的优缺点做一个总结。

    Adaboost的主要优点有:

    1)Adaboost作为分类器时,分类精度很高

    2)在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。

    3)作为简单的二元分类器时,构造简单,结果可理解。

    4)不容易发生过拟合

    Adaboost的主要缺点有:

    1)对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性

5、随机森林

  bagging的典型代表。未完

统计学习方法--提升方法adaBoost算法(集成学习)