hpvhpv疫苗什么时候上市都可以检查吗

AdaBoost算法的训练过程
每个Haar特征对应看一个弱分类器,但并不是任伺一个Haar特征都能较好的描述人脸灰度分布的某一特点,如何从大量的Haar特征中挑选出最优的Haar特征并制作成分类器用于人脸检测,这是AdaBoost算法训练过程所要解决的关键问题。
Paul Viola和Michael Jones于2001年将Adaboost算法应用于人脸检测中,其基本思想是针对不同的训练集训练同一个分类器(弱分类器),然后把这些不同训练集上的得到的分类器联合起来,构成一个最终的强分类器。
Adaboost 算法中不同的训练集是通过调整每个样本对应的权重来实现的。开始时,每个样本对应的权重是相同的,对于h1
分类错误的样本,加大其对应的权重; 而对于分类正确的样本, 降低其权重, 这样分错的样本就被突出出来,从而得到一个新的样本分布 U2
。在新的样本分布下,再次对弱分类器进行训练,得到弱分类器 h2 。依次类推,经过 T 次循环,得到 T 个弱分类器,把这 T
个弱分类器按一定的权重叠加(boost)起来,得到最终想要的强分类器。
&&&&&训练系统总体框架,由“
训练部分”和 “ 补充部分”构成。依据系统框架,本文的训练系统可分为以下几个模块:
(1)以样本集为输入,在给定的矩形特征原型下,计算并获得矩形特征集;
(2)以特征集为输入,根据给定的弱学习算法,确定闽值,将特征与弱分类器一一对应,获得弱分类器集;
(3)以弱分类器集为输入, 在训练检出率和误判率限制下, 使用A d a B o o s t 算法
挑选最优的弱分类器构成强分类器;
(4)以强分类器集为输入,将其组合为级联分类器;
(5)以非人脸图片集为输入,组合强分类器为临时的级联分类器,筛选并补充
非人脸样本。
训练样本的选择:&&&
训练样本要求是面部特写图像,图1是一簇训练样本,大小被归一化为24&24像素,其中正训练样本要求是面部特写图像,但是人脸形态千差万别,所以训练样本选取过程中要考虑到样本的多样性。负训练样本,大小被归一化为24&24像素,其中各样本不完全相同,分别具有一定的代表性。
&&&&&&&&&&&&&&图1
部分训练正样本集和训练负样本集
训练过程分为3个步骤:首先需要提取Haar特征;然后将Haar特征转化成对应的弱分类器;最后从大量的弱分类器中迭代选择出最优弱分类器。
(1)提取Haar特征
&&&&&&&&&&&&&&&&&&&
图2 常用的四种Haar特征
常用的Haar特征有4种,如图2所示。当然也可以在这4种特征的基础上设计出更多、更复杂的特征。以大小为24X24像素的训练样本为例,上述4种特征的总个数超过了160000个。这样庞大的数字给后续的迭代训练工作带来了庞大的计算量,直接导致AdaBoost算法训练过程极为费时,这恰恰是算法需要改进的关键问题之一o
(2)生成弱分类器&&&
每一个Haar特征都对应着一个弱分类器,每一个弱分类器都是根据它所对应的Haar特征的参数来定义的。利用上述Haar特征的位置信息,对训练样本进行统计就可以得到对应的特征参数。AdaBoost算法中所训练的弱分类器是任何分类器,包括决策树,神经网络,隐马尔科夫模型,如果弱分类器是线性神经网络,那么AdaBoost算法每次将构造多层感知器的一个节点。
(3)采用AdaBoost算法选取优化的弱分类器
AdaBoost算法训练过程就是挑选最优弱分类器,并赋予权重过程,图3是AdaBoost算法训练示意图。
&&&&&&&&&&&&&&&&&&&&&&&&&&&
图3& AdaBoost算法训练示意图
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。你正在使用的浏览器版本过低,将不能正常浏览和使用知乎。3213人阅读
Data Mining(9)
本文不定期更新。原创文章,转载请附上链接&谢谢
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..3990
分类误差:e2=0.1*3/1.4
分类器权重a2=0.6493
错分的3个点权值为:D2=0.1*(1-0.2144)/0.4
第三次分类:
同上步骤可求得: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)执行效果依赖于弱分类器的选择
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 @
execute stmt111;
#1.分类器为垂直x轴直线
if (@hy=0) then
#处理分类1
set @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) then
set @clas=concat('update hea set l=-1 where id = ',@i);
prepare stmt28 from @
execute stmt28;
if(@l_1!=0 and @l_2 =0) then
set @clas=concat('update hea set l=1 where id = ',@i);
prepare stmt29 from @
execute stmt29;
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+@
set @flag1=1;
set @clas=concat('update hea set l=1 where id = ',@i);
prepare stmt20 from @
execute stmt20;
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+@
set @flag2=1;
set @clas=concat('update hea set l=-1 where id = ',@i);
prepare stmt21 from @
execute stmt21;
#总权值&误差
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&假设权重a
set @j=concat('update hea set e = ',@evalue,' ,a = ',@avalue,' where id = ',@i);
prepare stmt11 from @j;
execute stmt11;
#更新错分样本的权重
if (@hy=0) then
if (@flag1=1) then
set @k=concat('update adaset set ',@cur,' = ',@las,'*',@eee,' where class=-1 and x & ',@hx);
prepare stmt12 from @k;
execute stmt12;
if (@flag2=1) then
set @m=concat('update adaset set ',@cur,' = ',@las,'*',@eee,' where class=1 and x & ',@hx);
prepare stmt13 from @m;
execute stmt13;
if (@flag3=1) then
set @n=concat('update adaset set ',@cur,' = ',@las,'*',@eee,' where class=-1 and x & ',@hx);
prepare stmt14 from @n;
execute stmt14;
if (@flag4=1) then
set @o=concat('update adaset set ',@cur,' = ',@las,'*',@eee,' where class=1 and x & ',@hx);
prepare stmt15 from @o;
execute stmt15;
set @i=@i+1;
以上是博主最近用SQL实现的Adaboost算法的部分代码。数据库表以后整理一下再贴。Ubuntu不稳定啊,死机两次了。。编辑的博客都没了。。累觉不爱。。
上文中的缺点提到,Adaboost算法的效果依赖于弱分类器的选择,那么面对巨大的待分类数据时,如何选择弱分类呢?有没有什么原则。博主依旧在探索中,找到答案的话会在这里更新。
推荐资料:由Adaboost算法创始人Freund和Schapire写的关于Adaboost算法的文档,我已经上传。
原创文章,转载请原创文章,转载请附上链接&谢谢
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:81575次
积分:1253
积分:1253
排名:千里之外
原创:42篇
评论:10条
中国科学院大学CS博士在读,关注内存,编译,大数据,机器学习,算法研究,移动互联网等学科和产业,希望结识更多同道中人。Linkedin:xiemy1992 AT 163 DOT com
(1)(5)(5)(3)(1)(4)(5)(2)(1)(4)(10)(8)你正在使用的浏览器版本过低,将不能正常浏览和使用知乎。声明: 这篇笔记是自己对AdaBoost原理的一些理解,如果有错,还望指正,俯谢~
AdaBoost算法,这个算法思路简单.
  AdaBoost算法,是一种组合算法(通过多个弱分类器,组合成一个强分类器):
  关于AdaBoost算法的流程,简单的描述,我们以A Short Introduction to Boosting中提到的用AdaBoosting进行二分类来描述一
下AdaBoost算法的具体流程:
  1; 不妨假设给定要训练的数据包含下面三个信息data{weight,value,values[num]}; 注意:num表示的分类的数目,这里num=2;
   1.1 data也是一个大小N的数组,我们这里假定有T个弱分类器(T的大小需要自定义,原则上越大越好,但是T了会有性能问题,
需要主观把握一下),其中value,values中的值取值范围在{-1,+1}之间取舍.
& & 2, 初始化data数组中的weight=1/N;
& & 3, &for t = 1,...,T;
    3.1 & 使用第t个弱分类器对数据data进行分类,然后得到分类的数组ht:X -& {-1,+1};
    3.2 统计分类错误率:&&E=表示错误率,errorNum表示样本分类错误的个数,totalNum表示总样本数.
    3.3 计算a的值,并保存在数组中,计算公式: Et为上面计算所得的错误率,一般要求错误率不要低于1/2
    3.4 & 更新数据data中的权重weight
         for i=1 , ...., N ;
         if ht(xi) == data[i].value:
           &
& & & & & & & & & & & & &else
           &
    注:Zt是归一化函数,将 Z = sqrt( Et(1-Et) );
& & & & & & 3.5 data中的权重weight更新完成之后,t=t+1,重新将新的权重的data交给下一个弱分类器进行分类,重复3~3.5;
& & & 最后将得到的at &,&ht(x),进行累成,
    4 for i=1 , ..... , N ;
        
& & & & & &5计算accuray:
      &  
 以上就是整个Adaboost原理的详细流程,更加形象的流程图,出自依据PRML;
            &
  附录:如果理解了上面流程之后,建议移步去这个地方学习一下,因为对有些公式给予了证明,因为当时证明的时候,
参考的是那儿的,所以直接给出源吧:
阅读(...) 评论()

我要回帖

更多关于 hpv4价什么时候上市 的文章

 

随机推荐