AdaBoost (Adaptive Boosting) 自适应增强 简单理解算法与matlab实现

综述

AdaBoost学习算法用于提高简单学习算法的分类性能。它通过组合一组弱分类函数(具有较高分类错误的弱分类器)来形成更强的分类器。最后的强分类器采用弱分类器加阈值的加权组合的形式。

AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。AdaBoost方法对于噪声数据和异常数据很敏感,但在一些问题中,AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象。AdaBoost方法中使用的分类器可能很弱(比如出现很大错误率),但只要它的分类效果比随机好一点(比如两类问题分类错误率略小于0.5),就能够改善最终得到的模型。而错误率高于随机分类器的弱分类器也是有用的,因为在最终得到的多个分类器的线性组合中,可以给它们赋予负系数,同样也能提升分类效果。

与Boosting的区别:Boosting 是一种将弱分类器转化为强分类器的方法统称,而AdaBoost是其中的一种,采用了exponential loss function(其实就是用指数的权重),根据不同的loss function还可以有其他算法,比如L2Boosting, logitboost等。

实现思路: AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。

算法流程

假设输入为 xi,i=1..N x i , i = 1.. N
弱分类器为 hj h j
(x⃗ i,yi)yi(1,1) ( x → i , y i ) 中 y i ∈ ( − 1 , 1 )

  1. 初始化权重 w w
  2. for t=1..T (T为弱分类器h个数)
  3. 进行权重归一化:
    wi=wij=1Nwj
    使得
    i=1Nwi=1 ∑ i = 1 N w i = 1
  4. 计算每个弱分类器的错误率 e e ,并选择错误率e最小的弱分类器 hk h k ,其中错误率计算公式为
    ek=i=1Nwi(1hk(x⃗ i)yi2)0ek1 e k = ∑ i = 1 N w i ( 1 − h k ( x → i ) y i 2 ) 其 中 0 ≤ e k ≤ 1
  5. 计算该弱分类器的权限
    at=ln(1ekek) a t = l n ( 1 − e k e k )
  6. 更新权重
    wi=wiexp(atyihk(x⃗ i)) w i = w i e x p ( − a t y i h k ( x → i ) )
  7. end for

最后强分类器为

H(x⃗ )=sign(t=1Tatht(x⃗ )) H ( x → ) = s i g n ( ∑ t = 1 T a t h t ( x → ) )

Matlab实现

w = [1 1 1 1 1 1 1 1];
Y = [-1 1 1 1 -1 -1 1 -1];
h(1,:) = [-1, -1, 1, 1, 1, 1, 1, -1];
h(2,:) = [-1, 1, 1, -1, 1, 1, -1, -1];
h(3,:) = [1, 1, 1, 1, 1, 1, 1, 1];
e = [];
a = [];
for i = 1:2
  disp('--iteration--');
  sumW = sum(w);
  w = w ./ sumW;
  for j = 1:size(h,1)
    e(j) = sum(w.*(1 - h(j,:).*Y) / 2);
  end
  e
  minE = min(e);
  minI = find(e == minE);
  if (size(minI,2) > 1)
    minI = minI(1);
  end
  minE
  minI
  a(i) = log((1 - minE)/minE)/2
  w = w .* exp(-a(i) * h(minI,:).*Y)
  h(minI,:) = [];
  e(minI) = [];
end

h(1,:) = [-1, -1, 1, 1, 1, 1, 1, -1];
h(2,:) = [-1, 1, 1, -1, 1, 1, -1, -1];
%h1 means h1 above, h2 means h2 above
H = [];
for i = 1:8
  H(i) = sign(h(1,i) * a(1) +  h(2,i) * a(2));
end
H

总结

主要优点:

  1. Adaboost作为分类器时,分类精度很高
  2. 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
  3. 作为简单的二元分类器时,构造简单,结果可理解。
  4. 不容易发生过拟合

主要缺点:

  1. 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。

参考文献

  1. http://en.wikipedia.org/wiki/AdaBoost
  2. http://www.cnblogs.com/pinard/p/6133937.html
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值