数据挖掘干货分享(1)
Adaboost 是一种常用的boosting算法,它能针对同一个训练集训练不同的弱分类器,然后将弱分类器集合起来,组成最终的强分类器,boosting 起源于 PAC Learnability,现在,boost算法也出现了很多的其他boost算法,例如:logitboost算法,gentleboost算法等等。
下面的介绍是我从百度技术博客找到的一点内容,比我自己总结的要好,搬过来跟大家分享:
Boosting算法是一种把若干个分类器整合为一个分类器的方法,在boosting算法产生之前,还出现过两种比较重要的将多个分类器整合 为一个分类器的方法,即boostrapping方法和bagging方法。我们先简要介绍一下bootstrapping方法和bagging方法。
http://baidutech.blog.51cto.com/4114344/743809
bootstrapping方法的主要过程
主要步骤:
i) 重复地从一个样本集合D中采样n个样本
ii) 针对每次采样的子样本集,进行统计学习,获得假设Hi
iii) 将若干个假设进行组合,形成最终的假设Hfinal
iv) 将最终的假设用于具体的分类任务
bagging方法的主要过程 -----bagging可以有多种抽取方法
主要思路:
i) 训练分类器: 从整体样本集合中,抽样n* < N个样本 针对抽样的集合训练分类器Ci
ii) 分类器进行投票,最终的结果是分类器投票的优胜结果
但是,上述这两种方法,都只是将分类器进行简单的组合,实际上,并没有发挥出分类器组合的威力来。直到1989年,Yoav Freund与Robert Schapire提出了一种可行的将弱分类器组合为强分类器的方法并由此而获得了2003年的哥德尔奖(Godel price)。
Schapire还提出了一种早期的boosting算法,其主要过程如下:
i)从样本整体集合D中,不放回的随机抽样n1 < n个样本,得到集合 D1
训练弱分类器C1
ii)从样本整体集合D中,抽取 n2 < n个样本,其中合并进一半被C1 分类错误的样本。得到样本集合D2
训练弱分类器C2
iii)抽取D样本集合中,C1 和 C2 分类不一致样本,组成D3
训练弱分类器C3
iv)用三个分类器做投票,得到最后分类结果
到了1995年,Freund and schapire提出了现在的adaboost算法,其主要框架可以描述为:
i)循环迭代多次
更新样本分布
寻找当前分布下的最优弱分类器
计算弱分类器误差率
ii)聚合多次训练的弱分类
1)每次迭代改变的是样本的分布,而不是重复采样(re weight)
2)样本分布的改变取决于样本是否被正确分类
总是分类正确的样本权值低
总是分类错误的样本权值高(通常是边界附近的样本)
3)最终的结果是弱分类器的加权组合
权值表示该弱分类器的性能
1)adaboost是一种有很高精度的分类器
2)可以使用各种方法构建子分类器,adaboost算法提供的是框架
3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单
4)简单,不用做特征筛选
5)不用担心overfitting!
我们之所以使用AdaBoost是由于Boost的特性和AdaBoost的特性决定的:
简单来说,Adaboost有很多优点:
为了更好的理解adaboost 算法我们给出图示如下:
原始数点在二维平面内分布情况
经过第一次迭代得到的样本分布特征用gray mask 遮挡
第一次迭代
经过第二次迭代得到的样本分布特征用green mask遮挡(数据出现了不是正好分割的情况,所以分割线会穿过部分点)
第二次迭代
经过第三次迭代得到的样本分布特征用yellow mask 遮挡(不仅出现了不是恰好分割的点,还出现了偏离比较大的点,偏离比较大的点会舍弃)
第三次迭代
最后将三次次迭代聚合得到最终的结果
聚合结果
接下来我们将利用Google的sklearn对Adaboost进行测试,代码是我搬运的(略有改动,更简单),毕竟是经典的东西,怕我自己的代码丑到大家,注释是自己写的,爱你是亘古不变的 mua~
如果你还没有安装Python 请关注我的Blog(阅读原文)上面有详细的介绍
如果你还没有安装sklearn和matplotlib,请安使用pip进行安装,基本的命令如下:
推荐使用pip的原因就是因为,pip能自动安装依赖,并且能自动编译需要编译的文件
Okay,That's All, Thx For Your Coming And Feedback Please!
抢救不了他的排版,大家阅读原文吧