机器学习系列-AdaBoost

集成学习

在一般经验中,如果把好坏不等的东西掺到一起,那么通常结果会是比最坏的要好一些,比最好的要坏一些。这就是集成学习的出发点。如果把多个学习器结合起来,是否能获得比最好的单一学习器更好的性能呢?

集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务。集成学习一般先产生一组“个体学习器”(individual learner),再用某种策略将它们结合起来。个体学习器通常由一个现有的学习算法从训练数据产生。如果这些“学习器”是同一种“学习器”,我们说这样的集成是同质的;如果包含的是不同的“学习器”,则这种集成是异质的。同质集成中的个体学习器被称为“基础学习器”,异质集成中的个体学习器被称为“组件学习器”。

集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能,这对“弱学习器”(weak learner)尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也被直接称为弱学习器。(弱学习器常指泛化性能略优于随机猜测的学习器;例如在二分类问题上精度略高于50%的分类器。)

根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类,即个体学习器间存在强依赖关系、必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表是Boosting,后者的代表是“随机森林”(Random Forest)。

AdaBoost

Boosting是一族可将弱学习器提升为强学习器的算法。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值 T ,最终将这 T 个基学习器进行加权结合。Boosting族算法最著名的代表是AdaBoost。下面我们以分类任务来介绍AdaBoost算法。

设训练集 D={(x1,y1),(x2,y2),...,(xn,yn)} 是包含 n 个训练样本的集合。基分类器(就是基学习器,因为是分类任务,下面统称基分类器)的错误率 ϵi 定义为:

ϵi=1n[j=1nwjI(ci(xj)yj)]

初始时, w1=1n

其中 I(ci(xj)yj) 是一个指示函数,如果输入为真,返回1;否则返回0。基分类器 ci 的重要性由如下参数给出:

αi=12ln1ϵiϵi

如果错误率接近0,则 αi 具有一个很大的正值,而当错误率接近1时, αi 有一个很大的负值。参数 αi 也被用来更新训练样本的权值。为了说明这点,假定 w(j)i 在第 j 轮提升迭代中赋给样本 (xi,yi) 的权值。AdaBoost的权值更新机制如下式给出:

wj+1i=wjiZj{eαj,cj(xi)=yieαj,cj(xi)yi

其中, Zj 是一个正规因子,用来确保万 iw(j+1)i=1 。上面的公式给出的权值更新公式增加那些被错误分类样本的权值,并减少那些已经被正确分类的样木的权值。

AdaBoost算法将每一个分类器 cj 的预测值根据 αj 进行加权,而不是使用多数表决的方案。这种机制有助于AdaBoost惩罚那些准确率很差的模型,如那些在较早的提升轮产生的模型。另外,如果任何中间轮产生高于50%的误差,则权值将被恢复为开始的一致值 wi=1n ,并重新进行抽样。直至迭代 T 轮后结束。

AdaBoost的优缺点

AdaBoost的优点

  1. 很好的利用了弱分类器进行级联。
  2. 可以将不同的分类算法作为弱分类器。
  3. AdaBoost具有很高的精度。
  4. 相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重。

AdaBoost的缺点

  1. AdaBoost迭代次数也就是弱分类器数目不容易设定。
  2. 数据不平衡导致分类精度下降。
  3. 训练比较耗时。

猜你喜欢

转载自blog.csdn.net/bubingyang/article/details/78626407