adaboost简介
adaboost算法是将一系列弱分类器组合成一个强分类器的算法。所谓弱分类器是指识别错误率小于1/2,即准确率仅比随机猜测略高的学习算法。强分类器是指识别准确率很高并能在多项式时间内完成的学习算法。1
Adaboost算法依次训练弱分类器,赋予错误率低的分类器高权值,错误率高的分类器低权值,使得准确性高的分类器获得更高的‘话语权’,从而构造出一个强分类器。
可以想到,Adaboost算法主要包括两个部分:
1. 弱分类器的训练
2. 分类器权值的计算
弱分类器的训练
这里以decision stump(好像是这样的,待会再仔细写这块)为例
decision stump
classify stump从样本的某一特征中选定一个(可以多个吗?)阈值,小于此阈值的样本分为一类,否则分为另一类。此分类器的错误率较高,所以是一个弱分类器。
在训练弱分类器的时候并不是随便选取一个特征,确定一个阈值(要不怎么叫训练呢。。),而是对每一个特征中可能的阈值计算该分类器的错误率,选择一个错误率最小的分类器作为本轮训练得到的分类器。
那么问题又来了,怎么计算错误率呢?通常我们计算错误率的公式
error=numberofincorrectlyclassifiedexamplestotalnumberofexamples
,而在这里错误率是加权错误率,也就是每个样本的权重是不同的,假设现在有
n
个样本,
adaboost的另一个特点是上面提到的
wi
,每个样本的权重是会根据这个样本是否分类正确而变化。如果在一个分类器中第
i
个样本被错分,那在训练下一个分类器时,这个样本的权重会增大,这有什么用呢?会导致我们在训练过程会优先考虑这个权重大的样本,将这个样本正确分类。
分类器权值的计算
以
同时样本权值
wi
也要更新:
wi=wie−αsum(w)
样本
i
分类正确
其中
算法步骤
设有N个样本
分类器的训练:
初始化样本权值W,Wi=1/N
当循环次数 i 小于最大循环次数 MaxIter时
for 每个特征
计算m个可能的阈值(m是给定参数,可以是10,20,,,)
对于每个阈值:
分类,得到分类结果:predictY
计算加权错误率:sigma=sum(W.T*|predictY-Y|)
选择错误率较小的特征和阈值,作为本轮训练的分类器
利用上步得到的错误率,计算alpha_i=(1/2)*[(1-ssigma)/sigma]
更新样本权值W
W_i=(W_i*exp(-alpha_i)) -->分类正确
W_i=(W_i*exp(alpha_i)) ===>分类错误
W=W/sum(W)
总体分类结果:R=alpha_i*predictY
计算全局错误率:e=(R中错误个数)/N ---->通过R的符号判断分类
if e==0:break