专栏名称: 大数据挖掘DT数据分析
实战数据资源提供。数据实力派社区,手把手带你玩各种数据分析,涵盖数据分析工具使用,数据挖掘算法原理与案例,机器学习,R语言,Python编程,爬虫。如需发布广告请联系: hai299014
目录
相关文章推荐
大数据文摘  ·  某机构:JSON 输出会让 AI ... ·  2 天前  
CDA数据分析师  ·  关于CDA数字化人才认证考试报名费用调整通知 ·  3 天前  
天池大数据科研平台  ·  一文详解|如何微调(Fine-tuning) ... ·  2 天前  
南都鉴定评测实验室  ·  年轻人“反杀熟”背后:拿什么拯救我们对算法的 ... ·  2 天前  
玉树芝兰  ·  想学好提示词写作吗?推荐给你一本好书 ·  4 天前  
51好读  ›  专栏  ›  大数据挖掘DT数据分析

Python的机器学习实战:AadBoost

大数据挖掘DT数据分析  · 公众号  · 大数据  · 2017-02-07 00:31

正文



数据挖掘入门与实战  公众号: datadw


目录:

1. Boosting方法的简介

2. AdaBoost算法

3.基于单层决策树构建弱分类器

4.完整的AdaBoost的算法实现

5.总结


1. Boosting方法的简介

Boosting方法的基本思想:对于一个复杂的任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好. 实际上就是“三个臭皮匠顶个诸葛亮的道理。”(


对于分类问题而言, 给定一个训练集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易得多。Boosting方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称基本分类器),然后组合这些弱分类器,构成一个强分类器。

对于Boosting方法来说,需要回答两个问题:

2. AdaBoost算法 

boosting 方法拥有多个版本,其中最流行的一个版本就是AdaBoost,即adaptive boosting.

对与上面提到的两个问题,AdaBoost的做法分别是:

具体算法流程描述如下:

假定给定一个二分类的训练数据集

T={(x1,y1),(x2,y2),,(xN,yN)}" role="presentation">T={(x1,y1),(x2,y2),,(xN,yN)}

其中,每个样本点由实例与标记组成. 实例 xiXRn" role="presentation">xiXRn

,标记 yiY" role="presentation">yiYRn" role="presentation">RnX" role="presentation">X 是实例空间,Y" role="presentation">Y

是标记集合. 

输入:训练数据集 T={(x1,y1),(x2,y2),,(xN,yN)}" role="presentation">T={(x1,y1),(x2,y2),,(xN,yN)}

,其中 xiXRn" role="presentation">xiXRn, yiY={1,+1}" role="presentation">yiY={1,+1}

;弱分类器;

输出:最终分类器 G(x)" role="presentation">G(x)

.

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

D1={w11,,w1i,,w1N},w1N=1N,i=1,2,,N" role="presentation">D1={w11,,w1i,,w1N},w1N=1N,i=1,2,,N

初始化的时候让每个训练样本在基本分类器的学习中作用相同

(2) 对 m=1,2,,M" role="presentation">m=1,2,,M

(a) 使用具有权值分布 Dm" role="presentation">Dm

的训练数据学习,得到基本分类器

Gm(x):X{1,+1}" role="presentation">Gm(x):X{1,+1}

(b) 计算 Gm(x)" role="presentation">Gm(x)

在训练数据集上的分类误差

em=P(Gm(xi)yi)=i=1NwmiI(Gm(xi)yi)" role="presentation">em=P(Gm(xi)yi)=Ni=1wmiI(Gm(xi)yi)

(1)

(c) 计算 Gm(x)" role="presentation">Gm(x)

的系数

αm=12log1emem" role="presentation">αm=12log1emem

(2)

这里对数是自然对数. αm" role="presentation">αm

表示 Gm(x)" role="presentation">Gm(x) 在最终分类器中的重要性,由该式可知,当 em12" role="presentation">em12 时,αm0" role="presentation">αm0,并且 αm" role="presentation">αm 随着 em" role="presentation">em

的减小而增大,所以误差率越小的基本分类器在最终分类器中的作用越大.

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

Dm+1={wm+1,1,,wm+1,i,,wm+1,N}" role="presentation">Dm+1={wm+1,1,,wm+1,i,,wm+1,N}

(3)

wm+1,i=wmiZmexp(αmyiGm(xi)),i=1,2,,N" role="presentation">wm+1,i=wmiZmexp(αmyiGm(xi)),i=1,2,,N

(4)

这里 Zm" role="presentation">Zm

是归一化因子.

Zm=i=1Nwmiexp(αmyiGm(xi))" role="presentation">Zm=Ni=1wmiexp(αmyiGm(xi))

它使 Dm+1" role="presentation">Dm+1

成为一个概率分布. 式 (4) 还可以写成:

wm+1,i={wmiZmeαm,Gm(xi)=yiwmiZmeαm,Gm(xi)yi" role="presentation">wm+1,i={wmiZmeαm,Gm(xi)=yiwmiZmeαm,Gm(xi)yi

由此可知,被基本分类器 Gm(x)" role="presentation">Gm(x)


误分类样本的权值得以扩大,而被正确分类样本的权值却得以缩小,因此误分类样本在下一轮学习中起更大作用.

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

f(x)=i=1NαmGm(x)" role="presentation">f(x)=Ni=1αmGm(x)

得到最终分类器

G(x)=" role="presentation">G(x)=

sign(f(x))=" role="presentation">(f(x))=sign(m=1MαmGm(x))" role="presentation">(Mm=1αmGm(x))

线性组合 f(x)" role="presentation">f(x)

实现 M" role="presentation">M 个基本分类器的加权表决. f(x)" role="presentation">f(x) 的符号决定了实例 x" role="presentation">x 的类别,f(x)" role="presentation">f(x)

的绝对值表示分类的确信度.


3.基于单层决策树构建弱分类器 

所谓单层决策树(decision stump, 也称决策树桩)就是基于简单的单个特征来做决策,由于这棵树只有一次分裂过程,因此实际上就是一个树桩。

首先通过一个简单的数据集来确保在算法实现上一切就绪.

def loadSimpData():
    dataMat = np.matrix( [ [ 1., 2.1],
                           [ 2., 1.1],
                           [ 1.3, 1.],
                           [ 1., 1. ],
                           [ 2., 1. ] ] )
    classLabels = [ 1.0, 1.0, -1.0, -1.0, 1.0 ]                           
    return dataMat, classLabels

 

下图给出了上面数据集的示意图

 

如果使用上面所述的单层决策树来对上面的样本点进行分类,即试着从某个坐标轴选择一个值(选择一条与坐标轴平行的直线)来将所有蓝色样本和褐色样本分开,这显然不可能。但是使用多棵单层决策树,就可以构建出一个能对该数据集完全正确的分类器.

首先给出单层决策树生成函数




 

上面两个函数作用是对于给定的数据集选出最佳的单层决策树.


4.完整的AdaBoost的算法实现

下面给出完整的AdaBoost的算法实现



 

运行结果


 

可以看到错误率逐步被降到0.0

, 最终的分类器包含3个基本分类器.


基于AdaBoost进行分类,需要做的就只是将弱分类器的训练过程从程序中抽取出来,然后应用到某个具体实例上去。每个弱分类器的结果以其对应的 alpha 值作为权值. 所有这些弱分类器的结果加权求和就得到了最后的结果.



测试


 

测试结果

[[-0.69314718]]
[[-1.66610226]]
[[-2.56198199]]
[[-1.]]

 

可以发现,随着迭代进行,数据点[0,0]

的分类确信度越来越强.


5.总结

AdaBoost的优点:泛化错误率低,可以用在大部分分类器上,无参数调整(自适应).

缺点:对离群点敏感.

via:http://blog.csdn.net/zdy0_2004/article/details/49894655


新浪微博名称:大数据_机器学习


数据挖掘入门与实战

搜索添加微信公众号:datadw


教你机器学习,教你数据挖掘


长按图片,识别二维码,点关注



  公众号: weic2c   
据分析入门与实战

长按图片,识别二维码,点关注