- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分类回归树
分类回归树(Classification and regression trees,CART)是决策树的一种,它是基于吉尼(Gini)指标(并且是最简化的吉尼指标)的方法。
在OpenCV下函数icvCreateCARTStageClassifier实现层强分类器的构建,而它又调用了icvCreateCARTHaarClassifier、icvInitCARTHaarClassifier、icvEvalCARTHaarClassifier实现了弱检测器的分类回归树的初始化、构建、赋值。
以下是简化了的算法描述:其中C代表当前样本集,当前候选属性集用T表示。
(1)新建一个根节点root
(2)为root分配类别(有人脸还是没有)
(3)如果T都属于同一类别(都是正样本或者反样本)或者C中只剩下一个样本则返回root为叶节点,为其分配属性。
(4)对任何一个T中属性执行该属性上的划分,计算此划分的分类不纯度 (吉尼不纯度)
(5)root的测试属性是T中最小GINI系数的属性
(6)划分C得到C1 C2子集
(7)对于节点C1重复(1)-(6)
(8)对于节点C2重复(1)-(6)
至于CART的修剪、评估等算法就不给出了。CART的修剪的算法是分类错误算法。如果想深入了解CART树,则阅读上节给出的参考书目。
弱分类器方法
弱分类器的种类很多,但OpenCV使用的是效果最好的决策树分类器。关于分类器的介绍在第一章已经讨论过了,如果要有更深入理解可以看一些数据挖掘的图书后,再看看OpenCV下的cvhaartraining.cpp文件。这里特别提下弱分类器的阈值的寻找方法。
阈值寻找算法定义在icvFindStumpThreshold_##suffix函数里面,它是通过一个宏被定义的。至于为什么通过这种方式定义,可以参考文献。[]
函数icvFindStumpThreshold_##suffix
输入参数介绍:wk是第k个样本的权重,yk是第k个样本是正样本还是反样本,如果是正样本则为+1,反样本则为-1,lerror、rerror是要求的最低误差,lerror=rerror=3.402823466e+38F(超大的数值),left、right是输出的误差。threshold是阈值,found为是否找到阈值,初始是0。
For i=1:num(对每个排序后的样本)
(1) ,
(2) ,
(3)curleft=wyl/wl , curright=wyr/wr
(4)如果curlerror+currerrorlerror+rerror
则
lerror=curlerror
rerror=curerror
threshold等于当前样本和前一个样本权重的均值
left=curleft
right=curright
found=1
End
返回found的值
虽然lerror、rerror初始都是很大的值,但保证了程序一开始就可以进入(4),使它们改为当前的误差值(默认一定会找到阈值),不断循环下,它们就可以取得最小的误差值。
DAB的权重调整算法
在OpenCV下函数icvBoostNextWeakClassifierDAB用于DAB的样本权重调整。它实现了以最佳弱分类器进行一次样本权重的调整,并返回这次调整后的错误分类百分比。
流程如下:
(1)初始化
err=sumw=0;
y向量是实际正反样本,f向量是样本在弱分类器下结果,都是1为真,-1为假。w向量是样本的权重。
(2)调整部分
(a)计算误检率。对应了图中errm=Ew[1(y!=fm(x))]
for i=0 to N-1
如果y(i)不等于f(i)(表示未被正确分类),则err=err+w(i);如果相等,err不变;
累加样本权重放到sumw中
end;
err=err/sumw;//计算了错误的比例,0err1/2
err= - log(err/(1 - err));
(b)更新权重
for i=0 to N-1
如果y(i)不等于f(i),则w(i)=w(i)*exp(err);否则w(i)不变
累加新的权重放在sumw中
end
(c)归一化权重
for i=0 to N-1
w(i)=w(i)/sumw;
end
(3)返回err的值
GAB的权重调整算法
OpenCV下使用icvBoostNextWeakClassifierGAB函数调整GAB方法的权重,这个函数返回的alpha值恒为1,这点可以从输出分类器的算法(3.2.1节)中看到,它是没有项的。
(1)初始化
sumw=0;
(2)调整部分
(a)更新权重
for i=0 to N-1
w(i)=w(i)*exp(-y(i)*f(i));//注意这里
文档评论(0)