AdaBoost 自适应增强 简单易懂 by hch

AdaBoost

自适应增强-Adaptive Boosting

简单易懂 by hch

“强可学习”与“弱可学习”

Kearns和Valiant提出了“强可学习”(strongly learnable)和“弱可学习”(weakly learnable):在概率近似正确(probably approximately correct,PAC)学习框架下,一个概念如果存在多项式的学习算法学习它,并且正确率很高,那么这个概念就被称为强可学习的;一个概念,如果存在多项式的学习算法学习它,并且正确率只比随机猜测好一点,那么这个概念称为弱可学习的。

AdaBoost是干啥的?

上面说的“弱可学习”就没有一点用吗?我们构建出来“弱分类模型”,比胡猜好不了多少,这个模型就废了吗?假如我告诉你存在 集成方法,能够将这些“弱分类模型”结合起来变成“强学习模型”,你会想了解吗?
集成方法主要包括Bagging和Boosting两种方法
这两种方法都是把若干个分类器整合为一个分类器的方法,只是整合的方式不一样,最终得到不一样的效果,将不同的分类算法套入到此类算法框架中一定程度上会提高了原单一分类器的分类效果,但是也增大了计算量。

天上的朋友, 地上的朋友,山上的朋友,树上的朋友,水里的朋友,天台上的朋友, 铁窗后的朋友, 把你们的元气借给我!!!

在这里插入图片描述

AdaBoost的具体流程

训练集

x 特征值1 特征值2 特征值n y
x1 1 0 1 0
x2 0 1 1 1
xm 1 0 1 0

xj表示第j个样本,共有m个样本
xji表示第j个样本的第i维特征值
yj表示第j个样本的tag,即结果
我们试图通过已知tag的数据去训练模型,从而预测未知tag的数据
(下面数学公式有哪里不懂了,记得回来看这里的定义)

具体流程

D t ( j ) 表 示 第 t 轮 第 j 个 样 本 的 权 重 , 进 行 T 轮 更 新 Z t 表 示 第 t 轮 样 本 权 重 之 和 , Z t = ∑ j = 1 m D t ( i ) D_t(j)表示第t轮第j个样本的权重,进行T轮更新\\ Z_t表示第t轮样本权重之和,Z_t=\sum_{j=1}^{m}D_t(i) Dt(j)tj,TZttZt=j=1mDt(i)

初 始 化 : D 1 ( i ) = 1 m , 样 本 权 重 目 前 都 是 1 / m Z 1 = ∑ j = 1 m D 1 ( j ) = 1 初始化: D_1(i)=\frac{1}{m},样本权重目前都是1/m\\ Z_1=\sum_{j=1}^mD_1(j)=1 D1(i)=m1,1/mZ1=j=1mD1(j)=1

For t in range(1,T):

利 用 第 一 个 弱 分 类 器 分 类 所 有 样 本 利用第一个弱分类器分类所有样本

计 算 错 误 率 : ϵ = 未 正 确 分 类 的 样 本 数 目 全 部 样 本 数 目 m 计算错误率:\epsilon =\frac{未正确分类的样本数目}{全部样本数目m} ϵ=m

计 算 该 分 类 器 的 权 重 : α = 1 2 ∗ l n ( ϵ 1 − ϵ ) 计算该分类器的权重:\alpha=\frac{1}{2}*ln(\frac{\epsilon}{1-\epsilon}) α=21ln(1ϵϵ)

更 新 每 一 个 样 本 的 权 重 : D t + 1 ( j ) = D t ( j ) Z t ∗ { e − α i f ( h θ ( x j ) = = y j ) e α i f ( h θ ( x j ) ! = y i ) 更新每一个样本的权重:D_{t+1}(j)=\frac{D_{t}(j)}{Z_t}*\begin{cases}e^{-\alpha} &if(h_\theta(x_j)==y_j)\\e^\alpha& if(h_\theta(x_j)!=y_i) \end{cases} Dt+1(j)=ZtDt(j){ eαeαif(hθ(xj)==yj)if(hθ(xj)!=yi)

Z t = ∑ j = 1 m D j Z_t=\sum_{j=1}^{m}D_j Zt=j=1mDj

循环完毕,利用集成模型预估结果:

g ( x ) = ∑ t = 1 T ( α ∗ h θ ( x ) ) g(x)=\sum_{t=1}^{T}(\alpha*h_\theta(x)) g(x)=t=1T(αhθ(x))
把每个模型的预测结果乘以它们的权重相加

试图理解具体流程:

维基百科:

AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。通过这样的方式,AdaBoost方法能“聚焦于”那些较难分(更富信息)的样本上。

我的话:

理解分类器的权重:

首先观察这个函数:

f ( ϵ ) = l n ( 1 − ϵ ϵ ) f(\epsilon)=ln(\frac{1-\epsilon}{\epsilon}) f(ϵ)=ln(ϵ1ϵ)
在这里插入图片描述
观察图像后,我们会发现这就是sigmoid函数给倒过来了嘛,我们自然也就清楚了它的意义,若趋向于1,则趋向于负无穷,若趋向于0,则趋向于正无穷。
也就是分类器预测的越对,则该权重越趋向于正无穷。

理解样本权重的更新:

对于样本权重:
∗ { e − α i f ( 预 测 对 了 ) e α i f ( 没 预 测 对 ) *\begin{cases} e^{-\alpha}&if(预测对了)\\e^\alpha&if(没预测对) \end{cases} { eαeαif()if()
错误率低分类器的且对该样本分类对的会使该样本权重趋于0,符合上面维基百科的说法:

某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低
反之分类器错误率很低,但该样本分类错了,就把这个样本权重提的很高
分类器错误率很高的话,预测对了,就把权重提的很高
分类器错误率很高的话,预测错了,就把权重趋向于0

用一句比维基百科更加实际的话总结吧:

分类器准确程度和样本分类趋向于不一致,则提高该样本权重。

一致,则减少。

为什么分类器错误率高,对样本预测错了,我们反而降低该样本权重?
我们对这一结果表示“满意”?
你别说奇怪,是这样的,因为错误率高的分类器的权重是负的
在实际预测时,这个分类器出结果了,我们表示“不相信”,所以它错
误率高的话,对于我们而说,它“准确率”挺高的。 在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hch977/article/details/104323506