本文不定期更新。原创文章,转载请注明出处,谢谢。

Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。Adaboost算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次得到的分类器最后融合起来,作为最后的决策分类器。

算法概述

1、先通过对N个训练样本的学习得到第一个弱分类器;
2、将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器;
3、将1和2都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器
4、最终经过提升的强分类器。即某个数据被分为哪一类要由各分类器权值决定。

与boosting算法比较

1. 使用加权后选取的训练数据代替随机选取的训练样本,这样将训练的焦点集中在比较难分的训练数据样本上;   
2. 将弱分类器联合起来,使用加权的投票机制代替平均投票机制。让分类效果好的弱分类器具有较大的权重,而分类效果差的分类器具有较小的权重。

与Boosting算法不同的是,AdaBoost算法不需要预先知道弱学习算法学习正确率的下限即弱分类器的误差,并且最后得到的强分类器的分类精度依赖于所有弱分类器的分类精度,这样可以深入挖掘弱分类器算法的能力。

算法步骤

1. 给定训练样本集S,其中X和Y分别对应于正例样本和负例样本;T为训练的最大循环次数;
2. 初始化样本权重为1/n ,即为训练样本的初始概率分布;   
3. 第一次迭代:(1)训练样本的概率分布相当,训练弱分类器;(2)计算弱分类器的错误率;(3)选取合适阈值,使得误差最小;(4)更新样本权重;   
经T次循环后,得到T个弱分类器,按更新的权重叠加,最终得到的强分类器。

具体步骤如下:

一.样本
Given: m examples (x1, y1), …, (xm, ym)
     where xiX, yiY={-1, +1}
     xi表示X中第i个元素,
     yi表示与xi对应元素的属性值,+1表示xi属于某个分类,
                                       -1表示xi不属于某个分类
二.初始化训练样本xi的权重D(i) :i=1,……,m;
    (1).若正负样本数目一致,D1(i) = 1/m
    (2).若正负样本数目m+, m-则正样本D1(i) = 1/m+,
负样本D1(i) = 1/m-

实例详解


图中“+”和“-”表示两种类别。我们用水平或者垂直的直线作为分类器进行分类。

算法开始前默认均匀分布D,共10个样本,故每个样本权值为0.1.

第一次分类:

第一次划分有3个点划分错误,根据误差表达式

 计算可得e1=(0.1+0.1+0.1)/1.0=0.3

分类器权重:

然后根据算法把错分点的权值变大。对于正确分类的7个点,权值不变,仍为0.1,对于错分的3个点,权值为:

D1=D0*(1-e1)/e1=0.1*(1-0.3)/0.3=0.2333

第二次分类:

如图所示,有3个"-"分类错误。上轮分类后权值之和为:0.1*7+0.2333*3=1.3990

分类误差:e2=0.1*3/1.3990=0.2144

分类器权重a2=0.6493

错分的3个点权值为:D2=0.1*(1-0.2144)/0.2144=0.3664

第三次分类:

同上步骤可求得:e3=0.1365 ;a3=0.9223;D3=0.6326

最终的强分类器即为三个弱分类器的叠加,如下图所示:

每个区域是属于哪个属性,由这个区域所在分类器的权值综合决定。比如左下角的区域,属于蓝色分类区的权重为h1 中的0.42和h2 中的0.65,其和为1.07;属于淡红色分类区域的权重为h3 中的0.92;属于淡红色分类区的权重小于属于蓝色分类区的权值,因此左下角属于蓝色分类区。因此可以得到整合的结果如上图所示,从结果图中看,即使是简单的分类器,组合起来也能获得很好的分类效果。

分类器权值调整的原因


由公式可以看到,权值是关于误差的表达式。每次迭代都会提高错分点的权值,当下一次分类器再次错分这些点之后,会提高整体的错误率,这样就导致分类器权值变小,进而导致这个分类器在最终的混合分类器中的权值变小,也就是说,Adaboost算法让正确率高的分类器占整体的权值更高,让正确率低的分类器权值更低,从而提高最终分类器的正确率。

算法优缺点

优点

1)Adaboost是一种有很高精度的分类器
2)可以使用各种方法构建子分类器,Adaboost算法提供的是框架
3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单
4)简单,不用做特征筛选
5)不用担心overfitting(过度拟合)

缺点

1)容易受到噪声干扰,这也是大部分算法的缺点

2)训练时间过长

3)执行效果依赖于弱分类器的选择

SQL实现

#开始迭代
while(@i<=3) do  set @evalue=0,@temp=0;set @flag1=0,@flag2=0,@flag3=0,@flag4=0;set @las=concat('d',@i-1);set @cur=concat('d',@i);set @a=concat('select hx,hy into @hx,@hy from hea where id = ',@i); prepare stmt1 from @a;execute stmt1;set @aa=concat('update adaset set ',@cur,' = ',@las); prepare stmt111 from @aa;execute stmt111;
#1.分类器为垂直x轴直线if (@hy=0) then #处理分类1set @b=concat('select count(class) into @l_1 from adaset where class="1" and x < ',@hx);prepare stmt2 from @b;execute stmt2;set @c=concat('select count(class) into @l_2 from adaset where class="-1" and x < ',@hx);prepare stmt3 from @c;execute stmt3;if(@l_1=0 and @l_2!=0) thenset @clas=concat('update hea set l=-1 where id = ',@i);prepare stmt28 from @clas;execute stmt28;end if;if(@l_1!=0 and @l_2 =0) thenset @clas=concat('update hea set l=1 where id = ',@i);prepare stmt29 from @clas;execute stmt29;end if;set @weight=concat('d',@i-1);if (@l_1 !=0 and @l_2 !=0 and @l_1>@l_2) then #@l_2是错分点set @d=concat('select sum(',@weight,') into @temp from adaset where class="-1" and x < ',@hx);prepare stmt4 from @d;execute stmt4;set @evalue=@evalue+@temp;set @flag1=1;set @clas=concat('update hea set l=1 where id = ',@i);prepare stmt20 from @clas;execute stmt20;end if;if (@l_1 !=0 and @l_2 !=0 and @l_1<@l_2) then #@l_1是错分点set @d=concat('select sum(',@weight,') into @temp from adaset where class="1" and x < ',@hx);prepare stmt5 from @d;execute stmt5;set @evalue=@evalue+@temp;set @flag2=1;set @clas=concat('update hea set l=-1 where id = ',@i);prepare stmt21 from @clas;execute stmt21;end if;
#总权值&误差set @h=concat('select sum(',@weight,') into @temp from adaset');prepare stmt10 from @h;execute stmt10;set @evalue = round(@evalue/@temp,4);set @avalue = round((0.5*ln((1-@evalue)/@evalue)),4);set @eee=round((1-@evalue)/@evalue,4);
#更新误差e&假设权重aset @j=concat('update hea set e = ',@evalue,' ,a = ',@avalue,' where id = ',@i);prepare stmt11 from @j;execute stmt11;
#更新错分样本的权重if (@hy=0) thenif (@flag1=1) thenset @k=concat('update adaset set ',@cur,' = ',@las,'*',@eee,' where class="-1" and x < ',@hx);prepare stmt12 from @k;execute stmt12;end if;if (@flag2=1) thenset @m=concat('update adaset set ',@cur,' = ',@las,'*',@eee,' where class="1" and x < ',@hx);prepare stmt13 from @m;execute stmt13;end if;if (@flag3=1) thenset @n=concat('update adaset set ',@cur,' = ',@las,'*',@eee,' where class="-1" and x > ',@hx);prepare stmt14 from @n;execute stmt14;end if;if (@flag4=1) thenset @o=concat('update adaset set ',@cur,' = ',@las,'*',@eee,' where class="1" and x > ',@hx);prepare stmt15 from @o;execute stmt15;end if;end if;
set @i=@i+1;
end while;

以上是博主最近用SQL实现的Adaboost算法的部分代码。数据库表以后整理一下再贴。Ubuntu不稳定啊,死机两次了。。编辑的博客都没了。。累觉不爱。。

个人疑问

上文中的缺点提到,Adaboost算法的效果依赖于弱分类器的选择,那么面对巨大的待分类数据时,如何选择弱分类呢?有没有什么原则。博主依旧在探索中,找到答案的话会在这里更新。

推荐资料:由Adaboost算法创始人Freund和Schapire写的关于Adaboost算法的文档,我已经上传。

原创文章,转载请注明出处,谢谢。

原文链接:http://blog.csdn.net/iemyxie/article/details/40423907

转载于:https://www.cnblogs.com/realkate1/p/5153400.html

Adaboost 2相关推荐

  1. 04 集成学习 - Boosting - AdaBoost算法构建

    03 集成学习 - Boosting - AdaBoost算法原理 十.AdaBoost算法构建 上一章最后说明了每个基模型的权值α是如何求得的,于是我就可以对模型进行更新操作了. 构建过程一 1.假 ...

  2. 基于Adaboost算法的人脸检测分类器!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:陈锴,Datawhale优秀学习者,中山大学数学系 人脸检测属于计 ...

  3. 最常用的决策树算法!Random Forest、Adaboost、GBDT 算法

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 本文主要介绍基于集成学习的决策树,其主要通过不同学习框架生产基学习器,并综合所有基学习 ...

  4. 集成学习-Adaboost

    Author: 鲁力; Email: jieyuhuayang@foxmail.com Datawhale Adaboost 算法简介 集成学习(ensemble learning)通过构建并结合多个 ...

  5. gbdt 算法比随机森林容易_机器学习(七)——Adaboost和梯度提升树GBDT

    1.Adaboost算法原理,优缺点: 理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络.对于决策树,Adaboost分类用了CART分类 ...

  6. GBDT 和 AdaBoost区别?

    GBDT 和 AdaBoost区别? Adaboost算法是一种提升方法,将多个弱分类器,组合成强分类器. AdaBoost,是英文"Adaptive Boosting"(自适应增 ...

  7. Boosting、Adaboost、AdaBoost模型的优缺点、提升树、梯度提升树GBDT

    Boosting.Adaboost.AdaBoost模型的优缺点.提升树.梯度提升树GBDT 目录 Boosting.Adaboost.AdaBoost模型的优缺点.提升树.梯度提升树GBDT Boo ...

  8. 【机器学习实战】第7章 集成方法(随机森林和 AdaBoost)

    第7章 集成方法 ensemble method 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重 ...

  9. 集成学习——Adaboost分类

    https://www.toutiao.com/a6674839167580504587/ 上一期分享了集成学习之Bagging分类的方法,这一期分享它的另外一种方法,Adaboost分类方. Ada ...

  10. Adaboost 算法的原理与推导

    Adaboost 算法的原理与推导 0 引言 一直想写Adaboost来着,但迟迟未能动笔.其算法思想虽然简单:听取多人意见,最后综合决策,但一般书上对其算法的流程描述实在是过于晦涩.昨日11月1日下 ...

最新文章

  1. 50 jQuery拷贝对象与多库共存
  2. IOS基础:声音调用
  3. [LNMP]——LNMP环境配置
  4. 迷你世界显示未连接服务器成功,迷你世界登录未成功是什么意思 | 手游网游页游攻略大全...
  5. linux训练python出现killed_Linux 查看进程被杀死的详情
  6. 别被忽悠了!阿里内部人士:我们正悄悄地拆掉中台,你还在建?
  7. iOS中将后台JSON数据转化为模型的总结
  8. 指定的服务已经标记为删除_全球70%的“根服务器”设在美国,为避免关网,中国已经在行动!...
  9. Java笔记第五篇 文本编辑器初见面
  10. plc secs半导体通讯协议 PLC 与MES的SECS/GEM通讯方案
  11. 为何不能直接拷贝软件安装好的目录运行
  12. C A+B for Input-Output Practice (II) SDUT
  13. wordpress邮件地址混淆 你没权限访问整个邮件地址造成的死链接
  14. 网站访问统计术语和度量方法
  15. lombok 基础注解之 @Cleanup
  16. [Matlab]LMS滤波器设计
  17. Py西游攻关之Django(一)
  18. 中基鸿业低收入家庭如何理财
  19. Cadence Orcad Capture新建原理图Symbol及新建和添加元件库到工程的方法图文教程及视频演示
  20. Windows XP Service Pack 3 (Windows XP SP3)简体中文版本正式发布(附下载地址)

热门文章

  1. html文件传递中文参数到flex中产生的中文乱码问题
  2. 【存储技术大杂烩】谈谈FC-SAN、IP-SAN、DAS、NAS几种存储技术
  3. 日常生活小技巧 -- UART 回环测试
  4. php 一个简单正则表达式,PHP中正则表达式回顾(3)--编写一个简单的正则表达式工具类...
  5. c四舍五入取整函数_学会这8个Excel函数,工作瞬间好轻松!
  6. c++入门代码_C/C++编程笔记:C语言入门题之正倒金字塔,正反三角形代码详解
  7. ppt矩形里面的图片怎么放大缩小_两年没做PPT,这些功能让我老泪纵横。
  8. 电脑屏幕保护怎么取消_怎么监控员工电脑?老板如何知道员工上班在干什么?...
  9. nginx重新加载php,如何使用nginx启动、停止和重新加载
  10. iphone静音键失灵_你知道iPhone手机中哪些一般人不知道的功能?