AdaBoost(Adaptive Boosting)
来源:大雄的学习人生     阅读:827
空军一号
发布于 2018-08-29 22:16
查看主页

AdaBoost 作为一种经典的提升方法,可以从不同维度去分析了解它。

算法释义

AdaBoost 作为一种提升方法,通过改变训练数据的权值分布,为不同的弱分类器定义不同的权值,从而将一系列弱分类器线性最终组合成一个强分类器。

算法步骤

输入:训练集 T,弱学习算法 g(x)
输出:最终分类器 G(x)
(1) 初始化样本权值:
D = (w_{1,1}, w_{1,2},..., w_{1,N}), w_i = \frac 1 N, i = 1,2,...,N

(2) 迭代训练一系列弱分类器:t = 1, 2,..., T
a 训练弱分类器:根据样本权值,训练得到基本分类器 gt
b 计算分类器误差:
e_t = \sum_{i = 1}^N \frac {w_{t,i}} {\sum_{i=1}^N w_{t,i}} I(y_i≠g_t(x_i))

c 计算 gt 的系数:
α_t = \ln \sqrt{\frac {1-e_t} {e_t}}

d 重新计算样本权值:
\begin{align} w_{t+1,i} = {w_{t,i}} e^{-α_ty_ig_t(x_i)} \\ \end{align}

(3) 取得最终分类器 G(x):
G(x) = sign \left( \sum_{t=1}^T α_t g_t(x) \right)


直观了解

AdaBoost 中比较关键的两步:1. 升级样本权值,2. 计算弱分类器系数;

  1. 通过升级样本权值训练下一个弱分类器,可以了解为添加本轮分类器分类错误的样本的权值,降低本轮分类器分类正确的样本的权值,我们知道每一轮训练的损失函数是和样本权值有关的,这样可以使下一轮弱分类器更加“重视”本轮误分类的样本。
  2. 从弱分类器权值的计算公式可以看出,错误率 et 越低,其权值越高,从而在最终分类器中占的比重越高,这也符合我们对线性组合分类器的直观了解。

从前向分布算法了解 AdaBoost

加法模型

f(x) = \sum_{t=1}^T α_tg_t(x;γ_t)

其中,gt(x;γt) 为基函数,γt 为基函数的参数,αt 为基函数的系数,这种由一系列基函数线性组合生成最终函数的模型称为加法模型。直接使用损失函数最小化去解加法模型中的参数是一个复杂的问题,因而一般采使用前向分步算法。

前向分步算法

前向分步算法的思想是:每一步学习一个基函数及其系数,使得最终函数逼近损失函数最小化的目标。

算法步骤

输入:训练数据集 T,损失函数 L(y, f(x)),基函数集 {g(x; γ)}
输出:加法模型 f(x)
(1) 初始化 f0(x) = 0
(2) 迭代训练:t = 1,2,...,T
a. 最小化经验损失函数,得到基函数及其参数
(α_t, γ_t) = arg\min_{α_t, γ_t} L(y, f_{t-1}(x) + α_tg_t(x;γ_t))

b. 升级 ft
f_{t}(x) = f_{t-1}(x) + α_tg_t(x;γ_t)

(3) 得到加法模型:
f(x) = f_T(x) = \sum_{t=1}^T α_tg_t(x;γ_t)

了解 AdaBoost

从上面前向分步算法的算法步骤中不难看出其和 AdaBoost 算法很类似,其实 AdaBoost 就是前向分步算法的特例。更具体地,AdaBoost 算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法的二分类学习方法。从加法模型和前向分步算法层面看,AdaBoost 的算法过程和它们如出一辙,但是如何了解 AdaBoost 算法的损失函数是指数函数呢?
假设 AdaBoost 是损失函数为指数函数的前向分步算法,当用 AdaBoost 算法经过 t-1 轮迭代,学习算法已经学得 ft-1,那么在第 t 轮迭代,需要计算的是使指数风险函数最小化的 gt 和 αt-1
\begin{align} & (α_t, g_t(x)) = arg\min_{α_t, g_t} \sum_{i=1}^N e^{-y_i(f_{t-1}(x_i) + α_tg_t(x_i))} \\ & 即:\\ & (α_t, g_t(x)) = arg\min_{α_t, g_t} \sum_{i=1}^N e^{-y_if_{t-1}(x_i)}e^{-y_iα_tg_t(x_i)}\\ & 又因为:e^{-y_if_{t-1}(x_i)} = w_{t,i} \\ & (α_t, g_t(x)) = arg\min_{α_t, g_t} \sum_{i=1}^N w_{t,i} e^{-y_iα_tg_t(x_i)}\\ & 将上述指数函数作一阶泰勒展开:\\ & (α_t, g_t(x)) = arg\min_{α_t, g_t} \sum_{i=1}^N w_{t,i} (1-y_iα_tg_t(x_i))\\ & 又因为 w_{t,i} 为常数项,对最小化没有影响:\\ & (α_t, g_t(x)) = arg\min_{α_t, g_t} \sum_{i=1}^N -w_{t,i} y_iα_tg_t(x_i)\\ & 先求解\, g_t:\\ & g_t(x) = arg\min_{g_t} \sum_{i=1}^N -w_{t,i} y_ig_t(x_i)\\ & 即:\\ & g_t(x) = arg\min_{g_t} \sum_{i=1}^N w_{t,i} I(y_i≠g_t(x_i))\\ & 而我们知道这就是 AdaBoost 每一轮迭代求解的基本分类器,然后求解α_t: \\ & α_t = arg\min_{α_t} \sum_{i=1}^N w_{t,i} e^{-y_iα_tg_t(x_i)} \\ & α_t = arg\min_{α_t} \left( \sum_{y_i=g_t(x)}w_{t,i} e^{-α_t} + \sum_{y_i≠g_t(x)}w_{t,i} e^{α_t} \right) \\ & 用 e_t 表示 g_t(x) 在训练样本上的错误分类率,则: \\ & α_t = arg\min_{α_t} \left( e_t(e^{α_t} - e^{-α_t}) + e^{-α_t} \right) \\ & 对α_t求导令其等于 0 可得:\\ & α_t = \ln{\frac {1-e_t} {e_t}} \\ & 这与 AdaBoost 算得的权值一模一样 \\ \end{align}

综上所述,AdaBoost 算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法的学习方法。


理论保障

有学者曾证实过 Adaboost 算法的泛化性能:
E_{out} ≤ E_{in} + O (\sqrt{O(d_{vc}(H)·T \log T) · \frac {\log N} N })

并且只需弱分类器的每轮的误分类率都小于 0.5,在 T = O(logN) 轮之后,Ein 就会等于0,那么上式右边的第二项也会很小,因而 Eout 也会很小。


参考资料

《机器学习技法》,林轩田
《统计学习方法》,李航

上一篇 目录 下一篇
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
排序算法(一):冒泡排序
女程序员吐槽: 12年毕业, 工资总包现在100万, 真算多?
Linux命令学习手册-arp
SQL已经48年了,为何仍然用广泛?
重磅来袭,GitHub 发布软件包管理服务!
首页
搜索
订单
购物车
我的