机器学习算法-Adaboost
来源:互联网 发布:cxax2013车床软件 编辑:程序博客网 时间:2024/06/06 02:10
Boosting是一类算法的统称,其基本思想很简单,就是”三个臭皮匠顶个诸葛亮”:针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。常见的分类算法,如kNN、线性分类器、决策树等,均可经过特殊约束构造弱分类器。
弱弱联合,变得更强!!!强在准确度上比较好理解,但是怎么提高效率就有点困惑了。因为本来只需训练单个强分类器便可以解决问题,现在却要多个弱分类器组合才能得到结果,计算次数和成本“明显”增加了。其实这块的优化是单个弱分类器的计算开销远远地低于单个强分类器,如判断一个新样本,单个强分类器可能需要对比十个属性才能得到分类结果,但每个弱分类器每次只需要对比一个属性,即使五个弱分类器组合,计算成本也远远小于单个强分类器。
对于Boosting算法,主要存在两个问题:
- 如何调整训练集,使得在训练集上训练的弱分类器得以进行?
- 如何将训练得到的各个弱分类器联合起来形成强分类器?
针对以上两个问题,1995年,Freund and Schapire改进了Boosting算法,取名为Adaboost算法。AdaBoost算法的调整主要是:
- 使用加权后选取的训练数据代替随机选取的训练样本,这样将训练的焦点集中在比较难分的训练数据样本上;
- 将弱分类器联合起来,使用加权的投票机制代替平均投票机制。让分类效果好的弱分类器具有较大的权重,而分类效果差的分类器具有较小的权重。
一、Adaboost算法步骤
AdaBoost算法的具体步骤如下:
1.给定训练样本集S:
2.初始化样本权重为
3.对于T轮训练,For
(1)基于当前训练样本的概率分布
(2)计算弱分类器的错误率:
(3)基于错误率,计算弱分类器
(4)更新样本权重:
其中
4.经T次循环后,得到T个弱分类器,按更新的权重叠加,最终得到的强分类器:
二、Adaboost算法举例
下面我们举一个简单的例子来看看Adaboost 的实现过程。 图中,“+”和“-”分别表示两种类别,在这个过程中,我们使用水平或者垂直的直线作为弱分类器,来进行分类:
第一步根据分类的正确率,得到一个新的样本分布
基于新分布
再基于新的样本分布
此时迭代结束,得到3个弱分类器。最终的强分类器由
每个区域是属于哪个属性,由这个区域所在分类器的权值综合决定。比如左下角的区域,属于蓝色分类区的权重为
三、Adaboost权值调整的原因
注意到算法最后的表到式为
这里面的
关于误差的表达式,到这里就可以得到比较清晰的答案了,所有的一切都指向了误差。提高错误点的权值,当下一次分类器再次分错了这些点之后,会提高整体的错误率,这样就导致
四、Adaboost算法实战
# -*- coding: utf-8 -*-from sklearn.model_selection import cross_val_scorefrom sklearn.datasets import load_irisfrom sklearn.ensemble import AdaBoostClassifier#加载iris数据集irisdata = load_iris()#调用Adaboost模型,迭代次数为100numT = 100clf = AdaBoostClassifier(n_estimators=numT)#交叉验证scores = cross_val_score(clf, irisdata.data, irisdata.target)accres = scores.mean()print accres
注:AdaBoostClassifier函数介绍:http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html
cross_val_score函数介绍:http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.cross_val_score.html
正确率:
参考资料:
- http://blog.csdn.net/haidao2009/article/details/7514787 浅谈 Adaboost 算法
- http://www.cnblogs.com/pinard/p/6136914.html scikit-learn Adaboost类库使用小结
- http://blog.csdn.net/a1628864705/article/details/63309077 Scikit-Learn 集成方法(Ensemble method) 学习
- https://item.jd.com/10975302.html 《统计学习方法》 李航
- https://item.jd.com/11867803.html 《机器学习》 周志华
- 机器学习算法-Adaboost
- 机器学习-AdaBoost算法
- 机器学习--AdaBoost算法
- 机器学习算法-Adaboost
- 【机器学习】AdaBoost算法详解
- 机器学习--AdaBoost元算法
- 【机器学习算法】之Adaboost
- 机器学习-adaboost元算法
- 机器学习之Adaboost算法
- 机器学习算法(三):Adaboost算法
- 机器学习算法6-AdaBoost元算法
- 机器学习经典算法6-AdaBoost
- 机器学习之AdaBoost元算法
- python机器学习之adaboost元算法
- 机器学习笔记之AdaBoost算法
- 【机器学习】AdaBoost算法分析与实现
- 【机器学习详解】AdaBoost算法原理
- 十大机器学习算法之AdaBoost
- c#爬虫三类
- css3实现文字描边的效果
- 面向对象设计模式之六大原则
- MyBatis (四) 注解和存储过程
- redis集群安装出现redis requires Ruby version >= 2.2.2.问题
- 机器学习算法-Adaboost
- QgridLayout例子QGridLayout使用方法,qlayout添加button实例
- JAVA(JDBC)通用查询
- Ajax 之久病成医
- head first java 笔记 chapter 4~7
- Form表单提交,Ajax请求,$http请求的区别
- TI: 以cpsw为例学习设备树(内核如何调用这些参数)
- VBA之excel小结
- eclipse安装OpenExplorer插件,资源管理器中打开文件所在位置