机器学习笔记之AdaBoost算法

  近来在看关于特征提取的基础知识,学到了AdaBoost提升算法。由于刚入门,理解起来特费劲,几天的琢磨,终于弄懂个所以然,故以博文记之,方便后续的回顾与查看。本人水平有限,所以内容理解难免有些不妥,希望大家可以提出,帮忙改进。

1,AdaBoost的基本思路

         最简单的说法就是,对一个复杂的任务,给多个人做判断,然后按照不同人的等级(例如有的是农民,有的是学生,有的是教授等),给他们做出的判断加个筹码(例如农民这个判断值1个筹码,学生的判断值5个筹码等),然后将其判断(-1/1)和其筹码相乘,然后所有人结果相加得到最后的判断。

       上述说的例子中,不同的人代表不同的弱分类器(判断能力很弱的分类器,判断结果比抛硬币好一点点),而他们的筹码代表弱分类器的权重,最终的结果就是将各个弱分类器与其权重的乘积和形成一个强的分类器。

         总的说,就是对一个特定的训练样本集,我们需要对它进行几轮的训练,在每一轮中,我们对那上一轮分类错误的样本权重加大,而把分类正确的样本权重减小,再投入这一轮的训练中,这样在这一轮中,之前那些分类错误的样本会受到更大的关注。最后再把每一轮得到的分类器按照加大分类误差率小的弱分类器的权值,使其在表决中起较大作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小作用。

       这样说可能有点乱,打个比喻吧,就像人要学习训练一样,刚开始,啥都不会,所以很多作业都做错,那怎么办?加大作业量咯(中国式教育o(╯□╰)o),这就是我们刚开始说的权重,每过一级,之前做不好的(分类错误的),就在这一级加大作业量(加大权重),确保做会了,做的好点(分类正确),就减少作业量(减少权重),好好玩耍。然后按照规则,一级一级的过,等到高考了,我们要答题了,对于之前每一级的知识点,那些学得不好的(分类误差率大的),我们就把分值弄低点(减小分类权值),那些学得好的(分类误差率小的),我们就把分值搞高(增大分类权值),确保能拿个不错的分数(总的分类误差率小)。注意前后的权重/权值是不一样的,总体思路就是这样,具体我们在下面会讨论。

2,AdaBoost的算法流程

    我们先看AdaBoost的算法流程,然后再逐步分析:

              CSDN公式编辑太麻烦了,流程就直接在《统计学习方法》中截下来

                  

                   

对该流程做个大概说明:

1,  给定训练样本集,要求该样本集有均匀的权值分布,确保每个样本在基本分类器的学习中作用相同。

2,  在第一轮训练中,每个数据特征(每个样本可以有不同种数据特征,也可以只有一种数据特征,有很多的样本,不同样本有相同种类的数据特征)的权值是相同的,都是1/N(N为样本个数),然后开始基本分类器训练(这里我们假设基本分类器的分类规则已知,后续会讨论该分类器如何得到),得到分类结果G_m(x),G_m(x)结果只有1,或-1两类。

3,  紧接着,计算分类误差率,该公式的意思是,计算每种数据特征在所有样本中分类错的数量,再乘以相应数据特征的权重,得到每种数据在本轮的分类误差率(如果有多种数据特征,该分类误差率应该是已向量的形式出现,我个人想法)。

4,  计算我们第二个权值,也就是最后要用于分类的系数,由于该公式是单调递增函数,所以当分类误差率较大,得到的分类系数会较小,也就是印证了我们之前说的,做得好的知识点分值高,做得不好的知识点分值低。

5,  更新权重,规则就是我们之前说的,错的权重大,对的权重小,以便下一轮得到更好的结果。

6,  最后就是把每轮得到的系数(第二个权重)和分类结果存储起来,然后算乘积和,得到最后的强分类器G(x)

至此,adaboost算法就差不多了,如果只是想要会用这个算法,看到这应该就够用了。

3,AdaBoost的算法解释

         AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二类分类算法。

         加法模型:

         看到这里,然后我们回到之前强分类器的定义f(x),会发现和当前这条式子有几分相似,也可以说明Adaboost用到了加法模型。

         前向分步算法:

几点说明:

1,  在这里,和前面AdaBoost的最终分类器结合起来看,我们把β_m b(x;γ)替换成我们之前的G_m (x),可以看到这一个过程与AdaBoost算法逐一学习基本分类器的过程是一致的。

2,  之前我们略过的基本分类器选择问题,现在我们可以来揭晓其真实面目了。

我们假定基本分类器为二分分类器,所以可以表示成:

    因为我们目标是要使该分类器在训练数据集T上的分类错误率最低,这个时候我们就要用到了损失函数,求其最小值,得到最优的θ。这里顺便说一下,在分类问题,使用指数损失函数,在回归问题,使用平方误差损失函数,在一般决策问题,使用一般损失函数。

         其指数损失函数为:

                            L(y,f(x))=minθ exp[-yh(x,f,p,θ)]

           所以在第一轮的时候,我们首先可以对训练样本集进行编号(1,2,3,4……),对每种数据特征可以初始化θ为0,然后可以选择θ为两个样本编号的中间值(例如0.5,1.5,2.5……),求出h(x,f,p,θ),并带入指数损失函数,得到该θ值的损失函数。最后遍历所有可能的θ值,分别求出指数损失函数,选出最小的指数损失值,对应的θ就是最优的θ。以此类推,在每一轮都重复同样的操作,直到所有弱分类器都训练完成。

 

3, Adaboost tree算法

该算法的流程与之前的算法流程大致是一样的,只不过把之前的基本分类器限制在决策树范畴:二类分类问题,基本分类器为二类分类树,回归问题上为回归树。

 贴上算法流程:

          该算法与之前算法差别就在于基本分类器以及更新的方式,该算法通过计算目标值与前一轮的预测值的残差最小值来得到最优分类阈值,最终得到每一轮回归拟合最好的弱分类器。

           至此,关于AdaBoost的内容都记得差不多了,大部分内容是依据《统计学习方法》来写的,所以内容如果叙述不当可参考《统计学习方法》。

     这是我在CSDN的第一篇博文,之前一直不敢写,怕错误,也怕麻烦,但当真正着手去写的时候,会发现很多知识点会得到更深的理解和巩固。当然,博文另个目的也想让那些像我刚入门的朋友们能够通过我的博文更好的理解算法,运用算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值