综述
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
)
- 初始化权重 w w
- for t=1..T (T为弱分类器h个数)
- 进行权重归一化:使得∑i=1Nwi=1 ∑ i = 1 N w i = 1
- 计算每个弱分类器的错误率
e
e
,并选择错误率最小的弱分类器
hk
h
k
,其中错误率计算公式为
ek=∑i=1Nwi(1−hk(x⃗ i)yi2)其中0≤ek≤1 e k = ∑ i = 1 N w i ( 1 − h k ( x → i ) y i 2 ) 其 中 0 ≤ e k ≤ 1
- 计算该弱分类器的权限
at=ln(1−ekek) a t = l n ( 1 − e k e k )
- 更新权重
wi=wiexp(−atyihk(x⃗ i)) w i = w i e x p ( − a t y i h k ( x → i ) )
- end for
最后强分类器为
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
总结
主要优点:
- Adaboost作为分类器时,分类精度很高
- 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
- 作为简单的二元分类器时,构造简单,结果可理解。
- 不容易发生过拟合
主要缺点:
- 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。