Gentle adaboost解释

来源:互联网 发布:域名隐藏端口号 编辑:程序博客网 时间:2024/04/30 23:54

1 算法原理

1.1 Gentle adaboost

这里写图片描述

参考文献: 

1.2 算法实现2

参考

  实现Gentle Adaboost的关键是要能估计出后验概率,即给定特征向量x的情况下,估计出当前权值分布下的该样本正样本的概率Pω(y=1|x)
  在Gentle Adaboost中,弱分类器定义为:
  公式(1)
  

f(x)=Pw(y=1|x)Pw(y=1|x)

  在特征向量是1维的情况下,可以利用lookup table将特征的取值范围分为多个区间,然后通过统计每个区间中的权值总和来估计后验概率。具体来说,令W+1iW1i分别表示第i个区间B(i)内正负样本权值的总和。
  
W+1i=xjB(i),yj=1wj
W1i=xjB(i),yj=1wj

后验概率为:
公式(2)
Pw(y=1|xB(i))=W+1iW+1i+W1i
Pw(y=1|xB(i))=W1iW+1i+W1i

将公式(2)代入公式(1)即可得到弱分类器。
如下公式(3):
f(x)=W+1iW1iW+1i+W1i

Gentle adaboost代码段  for i = 1:length(nodes)    curr_tr = nodes{i};    step_out = calc_output(curr_tr, Data); %节点分裂没有体现least-squres原则??    s1 = sum( (Labels ==  1) .* (step_out) .* distr);    s2 = sum( (Labels == -1) .* (step_out) .* distr);    if(s1 == 0 && s2 == 0)        continue;    end    Alpha = (s1 - s2) / (s1 + s2); %%弱分类器结果。与公式(3)一致    Weights(end+1) = Alpha;    Learners{end+1} = curr_tr;    final_hyp = final_hyp + step_out .* Alpha;      end  distr = exp(- 1 * (Labels .* final_hyp));  Z = sum(distr);  distr = distr / Z;  end

1.3算法实现3

openCV中对Gentle Adaboost算法弱分类器训练流程如下:
这里写图片描述
openCV中,节点分裂规则为均方误差法则。
这里写图片描述
强分类器训练流程为:
这里写图片描述

  • 可以看出,leftevaluerightvalue为节点左右分裂结果
  • 同时也是弱分类器的输出结果,他们可看作某一区域划分B(1)B(+1)的弱置信度.
  • leftvalue 和 rightvalue 可看作y的均值,lefterror 和righterror可看作 y的均方误差。
      可以看出:
    leftvalue=f(x)left=iwiyiiwi=yi=1wiyi+yi=1wiyiiwi=yi=1wiyi=1wiyi=1wi+yi=1wi=W+1iW1iW+1i+W1i
    同理rightvalue可得同样结论。

2 原理推导

这里写图片描述
  
  
  
参考文献:《基于Gentle Adaboost的行人检测》
《基于AdaBoost检测器的似然估计方法》
《采用Gentle AdaBoost和嵌套级联结构的实时人脸检测》
《Additive Logistic Regression: a Statistical View of Boosting》
http://blog.csdn.net/wsj998689aa/article/details/42652827

0 0
原创粉丝点击