数据科学、数据分析、人工智能必备知识汇总-----机器学习-----Adaboost-----持续更新

数据科学、数据分析、人工智能必备知识汇总-----机器学习-----主目录-----持续更新:https://blog.csdn.net/grd_java/article/details/144257225

这一章了解即可,为后面学习XGBoost打基础的一个东西

1. 简介

Blending融合,将各种弱学习器集成在一起


独立融合uniformly blending称为Bagging,也就是权重全为1

G ( x ) = s i g n ( ∑ g ( x ) ) G(x)=sign(\sum g(x)) G(x)=sign(g(x))


线性融合linearly blending,权重都不一样,称为Boosting

G ( x ) = s i g n ( ∑ α ⋅ g ( x ) ) G(x)=sign(\sum \alpha \cdot g(x)) G(x)=sign(αg(x))


非线性融合non-linearly blending,也属于Boosting。每个弱学习器经过各种各样非线性变换,再去进行相对应的融合

G ( x ) = s i g n ( ∑ h ( g ( x ) ) ) G(x) = sign(\sum h(g(x))) G(x)=sign(h(g(x)))

Adaboost属于线性融合的boosting

boosting


集成学习的一种思路


多轮迭代(全部数据)每一轮产生一个弱分类器


将弱分类器预测结果相加,得到强分类器的最终结果


Adaboost、GBDT、Xgboost


RF、Adaboost、GBDT和XGBoost 都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善单个学习器的泛化能力和鲁棒性(在面临内部结构或外部环境变化时,能够保持其功能和性能稳定的能力)


第一个模型学习,下图中可以看到虚线上下,上面应该全是红色,下面全是蓝色,但是上面有2个蓝色,下面出现一个红色,这些就是判错的样本,那么adaboost就会提高这些判错样本的权重


在这里插入图片描述


下图再次进行训练(注意是第一个模型的结果,给予第二个模型),发现又有2个蓝色的判给红色了,那么这两个蓝色提高权重


在这里插入图片描述


第二个模型的结果传递给第三个模型,再次划分后又有一个红色判错,那么就提高权重。最终每个弱学习器给相应权重,进行加权求和后,获取最终的结果


在这里插入图片描述

什么是Adaboost


1. 对样本赋予权重,采用迭代的方式来构造每一步的弱分类器


2. 最终通过弱分类器的linear blending(线性融合)得到强分类器

{ G ( x ) = α 1 ∗ g 1 ( x ) + α 2 ∗ g 2 ( x ) + α 3 ∗ g 3 ( x ) + . . . + α n ∗ g n ( x ) 向量形式 = α ⋅ g ( x ) \begin{cases} G(x) &= α_1*g_1(x) + α_2*g_2(x)+α_3*g_3(x)+...+α_n*g_n(x)\\ 向量形式&= α \cdot g(x) \end{cases} {G(x)向量形式=α1g1(x)+α2g2(x)+α3g3(x)+...+αngn(x)=αg(x)


3. 待解决问题:


1. 如何迭代生成若干 互不相同的 g ( x ) \textcolor{red}{互不相同的}g(x) 互不相同的g(x)


2. 如何获得 n 个 α n个α nα

回顾随机森林是如何集成的,每个弱学习器都是决策树,而且每个弱学习器权重都是1


在这里插入图片描述

而AdaBoost


1. 通过赋予样本不同的权重获得不同的 g(x)


2. 基分类器 g(x)大多使用 decision-stump 决策桩(相当于根节点只切分一下,相当于最多两层的决策树)


3. 我们通过修改数据的权重,使得本次训练的弱分类器在上次弱分类器做的不好的地方进行训练


在这里插入图片描述

2. 权重

什么是数据的权重 weight


回顾随机森林,它属于bagging思想,bagging的权重不就是bootstrap(放回式抽样,从样本集中随机抽一个样本,然后放回去,再抽一个,依次类推)


而对于AdaBoost,每个样本会有一个权重,训练集每个样本都会带着不同权重参与训练

权重与函数的关系


对于同一个算法


1. 训练集不同,生成的模型一定不同


2. 如果训练集相同,我们调整训练集中数据的权重,生成的模型也一定不同


对于同一个模型


1. 输入的数据权重不同,模型预测的权重正确率也一定不同,最终模型得分也不同


2. 可以通过调整输入数据的权重,让本来还不错的分类器(弱学习器)的权重正确率达到1/2

对于一个二分类模型,如果正确率是1%,那么是一个非常优先的模型,反着用的话相当于准确率为99%。而正确率是50%的话,那纯粹就是瞎蒙,最垃圾的模型。


对应到考试得分上,50%就是0分。而AdaBoost就是将判错(0分)的权重调大,让下一个弱学习器,重点关注这些,下次不要再错了。


这也是为什么明知50%是最垃圾,还是让权重准确率达到50%的原因


Adaboost 中的数据权重 Un


定义


数据预测的错误率 = ( 错误数据的个数 ) / ( 全部数据的个数 ) 数据预测的错误率 =(错误数据的个数)/(全部数据的个数) 数据预测的错误率=(错误数据的个数)/(全部数据的个数)


数据预测的权重错误率 = ( 预测错误数据的权重和 ) / ( 全部数据的权重和 ) 数据预测的权重错误率 =(预测错误数据的权重和)/(全部数据的权重和) 数据预测的权重错误率=(预测错误数据的权重和)/(全部数据的权重和)


举例


有一个标签集实际是 { + 1 , + 1 , + 1 , + 1 , − 1 } \{+1,+1,+1,+1,\textcolor{red}{-}1\} {+1+1+1+11}


我们训练出一个 g 1 ( x ) g_1(x) g1(x)的分类结果 { + 1 , + 1 , + 1 , + 1 , + 1 } \{+1,+1,+1,+1,\textcolor{blue}{+}1\} {+1+1+1+1+1},很明显前面4个预测对了,最后一个错了


当所有数据的权重都为 1/5 时,错误率是多少?权重错误率是多少?

1. 因为错误率和权重错误率是两个东西,错误数据1个,一共5个,那么错误率就是1/5


2. 而权重错误率是错误样本的权重/全部数据权重,每条样本权重1/5,一共错了1条,全部数据权重就是5个五分之一,为 1 / 5 1 / 5 ∗ 5 = 1 / 5 \dfrac{1/5}{1/5*5}=1/5 1/551/5=1/5


3. 因此,如果每条样本权重相同,数据预测错误率=权重错误率


当-1 的权重是 1/2,其余+1 是 1/8 的时候,权重错误率是多少?

1 / 2 1 / 8 ∗ 4 + 1 / 2 ∗ 1 = 1 / 2 1 = 1 / 2 = 50 % \dfrac{1/2}{1/8*4+1/2*1}=\dfrac{1/2}{1}=1/2=50\% 1/84+1/211/2=11/2=1/2=50%


只要正确的样本权重调小,错误的样本权重调大,就可以达到50%的权重错误率

1. AdaBoost初始,在训练集的每个数据背后都标注一个权重,初始权重为 1/N ,都一样,此时数据错误率等于权重错误率


2. 每一轮训练一个当前权重下权重错误率最低的 g(x),注意此时还没有调权重


3. 迭代生成下一轮的权重,就是将刚刚训练完的g(x)权重错误率调成50%,然后开始新一轮训练


考虑一下 decision-stump,下一轮数据权重变了,训练出来的分类器内部会发生什么改变?——当然是新学习器了,因为前面也介绍过,相同数据集,不同权重就是一个新g(x)

具体实现流程

既然通过权重不同来训练弱分类器模型 gt(x),那么我们每次找到 g(x)都应该使当前时刻权重正确率最大


目标


g t ← arg min ⁡ h ∈ H ( ∑ n = 1 N u n ( t ) [ Y n ≠ h ( x n ) ] ) \textcolor{red}{g_t} \leftarrow \displaystyle\argmin_{h ∈H}\bigg({\sum_{n=1}^N \textcolor{red}{u_n^{(t)}}[Y_n ≠ h(x_n)]}\bigg) gthHargmin(n=1Nun(t)[Yn=h(xn)])

[ Y n ≠ h ( x n ) ] [Y_n ≠ h(x_n)] [Yn=h(xn)]:表示真实和预测不同,也就是判错了,判错的样本所对应的权重,只需要去等于判对的权重就可以得到50%,(不懂的可以看下面《如何计算 U n t + 1 U_n^{t+1} Unt+1》)


g t + 1 ← arg min ⁡ h ∈ H ( ∑ n = 1 N u n ( t + 1 ) [ Y n ≠ h ( x n ) ] ) \textcolor{blue}{g_{t+1}} \leftarrow \displaystyle\argmin_{h ∈H}\bigg({\sum_{n=1}^N \textcolor{blue}{u_n^{(t+1)}}[Y_n ≠ h(x_n)]}\bigg) gt+1hHargmin(n=1Nun(t+1)[Yn=h(xn)])


现在我们根据 U n t U_n^t Unt得到了当前权重下表现最好的弱分类器 g t ( x ) g_t(x) gt(x)。接下来想要得到下一轮的 U n t + 1 U_n^{t+1} Unt+1算法才能继续工作下去


如何计算 U n t + 1 U_n^{t+1} Unt+1?


我们想要通过 U n t + 1 U_n^{t+1} Unt+1训练弱分类器 g t + 1 ( x ) g_{t+1}(x) gt+1(x),想要通过 U n t + 1 U_n^{t+1} Unt+1赋予 g t + 1 ( x ) g_{t+1}(x) gt+1(x)在之前 g t ( x ) g_t(x) gt(x)表现不好的地方得到补强


也就是说我们想要50%,也就是想要 ∑ n = 1 N u n ( t + 1 ) [ Y n ≠ g t ( x n ) ] ∑ n = 1 N u n ( t + 1 ) = 1 2 = 所有错误 U n t + 1 所有错误 U n t + 1 + 所有正确 U n t + 1 \dfrac{{\sum_{n=1}^N \textcolor{blue}{u_n^{(t+1)}}[Y_n ≠ g_t(x_n)]}}{{\sum_{n=1}^N \textcolor{blue}{u_n^{(t+1)}}}}=\dfrac{1}{2}=\dfrac{\textcolor{orange}{所有错误U_n^{t+1}}}{\textcolor{orange}{所有错误U_n^{t+1}}+\textcolor{green}{所有正确U_n^{t+1}}} n=1Nun(t+1)n=1Nun(t+1)[Yn=gt(xn)]=21=所有错误Unt+1+所有正确Unt+1所有错误Unt+1


就需要令判错的权重 所有错误 U n t + 1 \textcolor{orange}{所有错误U_n^{t+1}} 所有错误Unt+1等于判对的权重 所有正确 U n t + 1 \textcolor{green}{所有正确U_n^{t+1}} 所有正确Unt+1,他俩相等,代入进去不就是二分之一吗。


举个例子:假设共7337条样本, 所有错误 U n t = 1126 \textcolor{orange}{所有错误U_n^{t}}=1126 所有错误Unt=1126,则判错权重为 1126 7337 \dfrac{1126}{7337} 73371126 所有正确 U n t = 6211 \textcolor{green}{所有正确U_n^{t}}=6211 所有正确Unt=6211,判对权重为 6211 7337 \dfrac{6211}{7337} 73376211


那么判错权重 × × ×正确的样本数,判对权重 × × ×错误样本数,就让他俩相等了


U n t + 1 ← U n t ⋅ 6211 = 1126 7337 ⋅ 6211 = 1126 ⋅ 6211 7337 \textcolor{orange}{U_n^{t+1}}\leftarrow \textcolor{orange}{U_n^{t}} · 6211 = \dfrac{1126}{7337}· 6211=\dfrac{1126· 6211}{7337} Unt+1Unt6211=733711266211=733711266211


U n t + 1 ← U n t ⋅ 1126 = 6211 7337 ⋅ 1126 = 1126 ⋅ 6211 7337 \textcolor{green}{U_n^{t+1}}\leftarrow \textcolor{green}{U_n^{t}} · 1126 = \dfrac{6211}{7337}· 1126=\dfrac{1126· 6211}{7337} Unt+1Unt1126=733762111126=733711266211


这就是前面说的,判错的乘较大的数6211,判对的乘较小的数1126,就可以让哥俩一样。

AdaBoost定义了一个scaling factor来做上面这件事


在这里插入图片描述


定义了一个 ∇ t \nabla_t t,错误的总权重和乘以它,正确的总权重和除以它


本质上和上面我们说的判错乘较大数,判对乘较小数的效果是一样的


设 A 为正确的总权重和,B 为错误的总权重和, ε ε ε是错误率,也就是前面例子中的 1126 7337 \dfrac{1126}{7337} 73371126:


A ∗ ε = B ∗ ( 1 − ε ) A*ε= B*(1-ε) Aε=B(1ε)


总权重和 C = A ( 1 − ε ) = B ε C=\dfrac{A}{(1-ε)}= \dfrac{B}{ε} C=(1ε)A=εB


A ∗ ε ∗ A ( 1 − ε ) = B ∗ ( 1 − ε ) ∗ B ε A*ε*\dfrac{A}{(1-ε)}= B*(1-ε)*\dfrac{B}{ε} Aε(1ε)A=B(1ε)εB


A ∗ ε ∗ A ( 1 − ε ) = B ∗ ( 1 − ε ) ∗ B ε \dfrac{A*ε*A}{(1-ε)}= \dfrac{B*(1-ε)*B}{ε} (1ε)AεA=εB(1ε)B


A ∗ ε ( 1 − ε ) = B ∗ ( 1 − ε ) ε A*\sqrt{\dfrac{ε}{(1-ε)}}=B* \sqrt{\dfrac{(1-ε)}{ε}} A(1ε)ε =Bε(1ε)

3. 为什么需要弱一点的树

砍树+抽样


在这里插入图片描述


首先AdaBoost的权重是对 ∇ t \nabla_t t l n ln ln。因为ln是单调递增函数,错误率越高,权重就越高


如果是一颗完全生长树,很有可能在第一次学习就让错误权重降为0


那么对应的权重就是正无穷。会产生独裁效应,也就是没有后面模型的事了,第一个模型就完全学好了,这就偏离了集成学习的轨道

单独的一颗决策树,非常容易过拟合。不要沙雕的认为,既然一棵决策树就能学好的事情,还非要后面的模型干嘛。——就是怕过拟合!


因此我们需要进行剪枝等操作,让每颗树弱一些,给后面的模型留出更大的学习空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值