AdaBoost(Adaptive Boosting)算法详解
- 主要内容
- AdaBoost算法详解
- AdaBoost算法实例讲解
1、AdaBoost算法详解
假设有一位患者,存在某些症状。患者选择咨询多位医生,而不是一位。假设患者根据医生先前的诊断准确率,对每位医生的诊断赋予一个权重。然后,这些加权诊断的组合作为最终的诊断。这就是提升的基本思想。在提升(boosting)方法中,权重赋予每个训练元组。迭代地学习
T
个分类器。学习得到分类器
Adaboost(Adaptive Boosting)是一种流行的提升算法。假设我们想提升某种学习方法的准确率。给定数据集
S
,它包含
如果元组被错误分类,则它的权重增加。如果元组被正确分类,则它的权重减少。元组的权重反映元组被分类的困难程度——权重越高,被错误分类的可能性越高。然后,使用这些权重,为下一轮分类器(下一个分类器)产生训练样本。其基本的思想是,当建立分类器时,希望它更关注上一轮分类器(上一个分类器)错误分类的元组。整个分类过程中,某些分类器对某些“困难”元组的分类效果可能比其他分类器好。这样,建立了一个互补的分类器系列。
AdaBoost算法构建组合分类器的步骤如下:
算法:AdaBoost(Adaptive Boosting)
输入:
S:类标记的训练元组集合;
T:轮数(轮数即为分类器(分类方案)个数。第t轮分类,相当于第t个分类器进行分类,相当于训练集第t种分类方案);
一个基础分类算法;
输出:
一个组合分类器模型:包含T个分类器,以及分类器的表决权的权重,即公式(5);
方法:
将S中每个元组的权重初始化为1/n;
for t=1 to T do
根据元组的权重从S中有放回抽样,得到St;
根据St导出(训练出)分类器Mt;
根据公式(1)计算Mt的错误率error(Mt);
if error(Mt)>0.5 then
转向步骤11;
endif
根据公式(4)计算该分类器的表决权的权重;
for St的每个被正确分类的元组 do
根据公式(2)更新正确分类的元组的权重;
根据公式(3)规范化每个元组的权重;
endfor
endfor
第
t
个分类器
Mt 的错误分类率影响训练元组的权重的更新。如果第 i 元组在第
注:关于元组权重的更新,不同文献对其描述略有不同,周志华《机器学习》将其描述为: wt+1i=wti×exp(Wt)Zt 或 wt+1i=wti×exp(−Wt)Zt 。此处采用的是第3版《数据挖掘概念与技术》中的描述。
对于组合分类器最终的分类结果,每个分类器有一个“表决权”(即表决元组属于哪个类别),对每个分类器的“表决权”赋予一个权重。分类器的错误率越低,则准确率越高,则它的表决权的权重越大。分类器 Mt 的表决权的权重为
注:关于公式(4),不同文献对其描述略有不同,周志华《机器学习》将其描述为: Wt=12ln1−error(Mt)error(Mt) 。此处采用的是第3版《数据挖掘概念与技术》中的描述。
一旦提升完成,如何使用分类器的组合预测元组 X <script type="math/tex" id="MathJax-Element-78">X</script>的类标号?具体流程如下:
使用组合分类器对待分类元组X分类:
将每个类别的权重初始化为0;
for t=1 to T do //对所有基本分类器
分类器的表决权的权重加至划分X所属类别的权重上,即公式(5);
endfor
返回具有最大权重的类别;
2、AdaBoost算法实例讲解
关于AdaBoost算法实例讲解,网上大致有两个版本:一个是直接摘抄的李航《统计学学习方法》中关于AdaBoost算法的描述,另一个是大数据经典算法AdaBoost讲解的版本。后者关于元组权重更新以及分类器表决权权重的公式,采用周志华《机器学习》的描述。同时,后者关于AdaBoost算法的实例讲解,非常清晰,感兴趣的读者(初次接触AdaBoost算法的读者)可以尝试阅读。