AdaBoost学习算法用于提高简单学习算法的分类性能。它通过组合一组弱分类函数(具有较高分类错误的弱分类器)来形成更强的分类器。最后的强分类器采用弱分类器加阈值的加权组合的形式。
AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。AdaBoost方法对于噪声数据和异常数据很敏感,但在一些问题中,AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象。AdaBoost方法中使用的分类器可能很弱(比如出现很大错误率),但只要它的分类效果比随机好一点(比如两类问题分类错误率略小于0.5),就能够改善最终得到的模型。而错误率高于随机分类器的弱分类器也是有用的,因为在最终得到的多个分类器的线性组合中,可以给它们赋予负系数,同样也能提升分类效果。
与Boosting的区别:Boosting 是一种将弱分类器转化为强分类器的方法统称,而AdaBoost是其中的一种,采用了exponential loss function(其实就是用指数的权重),根据不同的loss function还可以有其他算法,比如L2Boosting, logitboost等。
实现思路: AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。
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
主要优点:
主要缺点: