机器学习-AdaBoosting及其Java实现

系统 1596 0

    Adaboost with trees is the best off-the-shelf classifier in the world.    -Breiman 1996

    决策树算法起源于1984年Breiman,Friedman等人提出的CART,后来又有人(Quinlan等)提出ID3,C4.5,C5.0,CHAID等算法,但是90年代随着支持向量机(SVM)的提出和发展,决策树遇到了极大的挑战。1996年,Freund和Schapire等人提出了Adaboost算法,可以将多个弱分类器(比如Stump决策树)组合起来形成一个更加强大的强分类器,其性能可以与支持向量机媲美,所以才会有Breiman上面那句话。

  (一) 算法:

  Adaboost算法的思想起源于80年代Valiant提出的PAC理论(Valiant因此获得2010年图灵奖),1996年由Freund和Schapire提出该算法(二人因此获得2003年的 Godel Price ,是计算机理论界的最高奖),其大体思想是,训练多个 弱分类器 (Weak Classifier,所谓弱分类器是指分类效果仅比随机分类器效果好就可以,亦即分类错误率要小于0.5,典型的弱分类器如 Stump ,亦即只有一个决策节点的决策树),每个弱分类器都会更加关注上个弱分类器分错类的训练样例,最终的分类器由所有的这些弱分类器加权组成,亦即其分类结果为多个弱分类器的分类结果的加权和。下面是详细介绍:

  Adaboost算法会训练M个弱分类器,每个分类器都会给所有的训练样例赋予权重,第一个分类器所有训练样例的权重都是1/N(N为训练样例的个数),后面每个弱分类器都会提高前面的弱分类器分错类的训练样例的权重,以便使得这些训练样例尽量不会再分错。在此,我们仅讨论最简单的二分类,亦即分类结果为{+1,-1}:

 

  1. 为第一个弱分类器的所有训练样例初始化权重,都设为1/N。

机器学习-AdaBoosting及其Java实现_第1张图片

  2. 迭代M次,亦即训练M个弱分类器:

  (a) 训练当前弱分类器,使得训练样例的加权误差Jm最小。

  (b) 求得当前弱分类器的加权误差率ε,如果ε>0.5,则当前分类器效果太差,算法终止,否则计算α=ln((1-ε)/ε),α是一个大于1的数,用来增加被分错类的训练样例的权重。

  (c) 对于所有被当前弱分类器分错类的训练样例,增大其权重(乘以α),以便在训练下一个弱分类器时重视这些被分错类的训练样例(真正实现时还应进行标准化,亦即使得所有权重的和为1)。

机器学习-AdaBoosting及其Java实现_第2张图片

  3. 最终得到的强分类器利用M个弱分类器的分类结果的加权和作为测试训练样例的分类结果。

  (二)Java实现

  为了充分理解Adaboost算法,我写了一个简单的Java程序,训练样例是二维空间上的N个点,用到的弱分类器是最简单的Stump,亦即树桩。当训练数据是随机生成的时候,迭代10次后得到的分类器的准确率会达到75%-90%。当训练数据是形如下所示的分布时(但是我的数据集只有20个点),准确率可以达到100%。

机器学习-AdaBoosting及其Java实现_第3张图片

  参考文献:

  [1] Christopher M.Bishop Pattern Recognization and Machine Learnin ( PRML ), Chapter 14 Combining Models, p657

  [2] Ethern Alpaydin 机器学习导论 15章 组合多学习器 p236

  [3] Boosting算法简介 百度搜索研发部 官方博客

  [4] 统计学习那些事 数据挖掘研究院

  [5] Wiki:Decision Tree Learning

  [6] Wiki:AdaBoost

机器学习-AdaBoosting及其Java实现


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论