机器学习 基础教程

机器学习 集成学习

机器学习 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/ml-adaboost.html

机器学习 Adaboost


Adaboost(Adaptive Boosting)是集成学习 boosting 家族中的一员。它是以色列计算科学教授 Yoav Freund 和美国计算机科学家 Robert Elias Schapire 于1995年提出的,两人因此在2003年获得了理论计算机领域最负盛名的奖项哥德尔奖(Gödel Prize)。

Adaboost的核心思想

Adaboost的核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器);具体来讲是,训练步骤大致是每个样本都有样本权重且初始权重相等(一般是1/n),迭代训练一轮生成一个弱分类器,下一轮训练的时候,将上一轮分错的样本进行加权,分对的相对降权,让下一轮迭代训练更加的关注分错的样本,以此循环往复,最终将若干个弱分类器进行组合成一个强分类器。

Adaboost的经典算法

Adaboost的最初提出是针对二元分类问题的,这里先介绍原始的针对二元分类的具体算法。

初始化:

  • 样本实例的特征数据变量,x1,x2,...,xn;
  • 样本实例的类数据变量,y1,y2,...,yn,y∈{-1,1};
  • 样本实例的初始化权重(即第一轮迭代的权重),ω1,12,1,...,ωn,1,每个权重都初始化为1/n;
  • 损失函数采用指数函数
  • 弱分类器函数是符号函数,h(x)=sign(f(x)),h(x)∈{-1,1};

for t in T(开始进行T轮迭代训练): 

  • 计算弱分类器的权重αt;
  • 将弱分类器加入到集成分类器线性组合函数中;
  • 更新样本权重;

以上是经典的Adaboost算法全过程。

Adaboost的改进算法

经典的adaboost算法最初是为了解决二元分类问题而提出的,后来基于其核心思想发展了很多改进算法,针对多分类问题的Adaboost-SAMME、Adaboost-SAMME.R、AdaBoost.M1、AdaBoost.M2、AdaBoost.MH,针对回归问题的AdaBoost.R2,针对排序场景的AdaRank等等;

Adaboost-SAMME 算法

事实上,Adaboost更专业的叫法是Forward Stagewise Additive Modeling using the exponential loss funtion;SAMME是forward Stagewise Additive Modeling using a Multi-class Exponential loss function(使用多类分类指数损失函数的前向逐步叠加模型)的缩写,是为针对解决多分类问题的。

Adaboost-SAMME算法相比于Adaboost经典算法,主要是两点变化:

  1. 计算基分类器的权重系数时额外加了log(K-1),主要是针对多分类的问题,当k=2时(即二元分类)等同于Adaboost算法;
  2. 决策函数(也就是最终的强分类器)的形式发生了变化,没有采用Adaboost的符号函数sign(),因为符号函数不适用于多分类,但作用并没有发生实质的变化,仍然可以看成是基分类器对输出结果进行投票;

完整的算法如下:

未完待续

Adaboost-SAMME.R 算法

Adaboost-SAMME.R 区别于 Adaboost-SAMME 的最大变化是通过计算类别的可能性值来递进更新模型。

完整的算法如下:

未完待续

scikit-learn(sklearn)分别实现了 Adaboost-SAMME 和 Adaboost-SAMME.R 算法。

Adaboost.M1 算法

Adaboost.M1 也是将二分类扩展到多分类问题。

未完待续

Adaboost.M2 算法

Adaboost.M2 算法不仅可以处理多分类问题,还引入了置信度的概念。

未完待续

Adaboost.MH 算法

Adaboost.MR 算法

Adaboost.R2 算法