其他分享
首页 > 其他分享> > 【机器学习基础01】Blending、Bagging与AdaBoost

【机器学习基础01】Blending、Bagging与AdaBoost

作者:互联网

去年的学习笔记,最近复习拿出来整理一下。

Aggregation Model

假设有 T T T个模型 g 1 , ⋯   , g T g_{1}, \cdots, g_{T} g1​,⋯,gT​,常见的聚合方法有:

  1. 在一个验证集上选出最佳的:

G ( x ) = g t ∗ ( x )  with  t ∗ = argmin ⁡ t ∈ { 1 , 2 , … , T } E val  ( g t − ) G(\mathbf{x})=g_{t_{*}}(\mathbf{x}) \text { with } t_{*}=\operatorname{argmin}_{t \in\{1,2, \ldots, T\}} E_{\text {val }}\left(g_{t}^{-}\right) G(x)=gt∗​​(x) with t∗​=argmint∈{1,2,…,T}​Eval ​(gt−​)

  1. 将所有模型取平均值:

G ( x ) = sign ⁡ ( ∑ t = 1 T 1 ⋅ g t ( x ) ) G(\mathbf{x})=\operatorname{sign}\left(\sum_{t=1}^{T} 1 \cdot g_{t}(\mathbf{x})\right) G(x)=sign(t=1∑T​1⋅gt​(x))

  1. 将所有模型加权平均:

G ( x ) = sign ⁡ ( ∑ t = 1 T α t ⋅ g t ( x ) )  with  α t ≥ 0 G(\mathbf{x})=\operatorname{sign}\left(\sum_{t=1}^{T} \alpha_{t} \cdot g_{t}(\mathbf{x})\right) \text { with } \alpha_{t} \geq 0 G(x)=sign(t=1∑T​αt​⋅gt​(x)) with αt​≥0

  1. 根据当前状态确定:

G ( x ) = sign ⁡ ( ∑ t = 1 T q t ( x ) ⋅ g t ( x ) )  with  q t ( x ) ≥ 0 G(\mathbf{x})=\operatorname{sign}\left(\sum_{t=1}^{T} q_{t}(\mathbf{x}) \cdot g_{t}(\mathbf{x})\right) \text { with } q_{t}(\mathbf{x}) \geq 0 G(x)=sign(t=1∑T​qt​(x)⋅gt​(x)) with qt​(x)≥0

以上都是直观上的想法,下面进一步研究。

Blending

均值融合(Uniform Blending)

在分类问题中:
G ( x ) = sign ⁡ ( ∑ t = 1 T g t ( x ) ) G(\mathbf{x})=\operatorname{sign}\left(\sum_{t=1}^{T} g_{t}(\mathbf{x})\right) G(x)=sign(t=1∑T​gt​(x))
在多分类任务中少数服从多数:

image-20210505235219484

在回归时就是取所有模型输出的均值。

当 g t g_{t} gt​预测值相近,那么性能不变。当 g t g_{t} gt​多样民主时,一些分类结果 g t ( x ) > f ( x ) g_{t}(\mathbf{x})>f(\mathbf{x}) gt​(x)>f(x),另一些分类结果$ g_{t}(\mathbf{x})<f(\mathbf{x})$,那么理想状态取平均可以获得最佳解。综合上述两种需求,多样性的hypotheses更容易使得融合模型性能更佳。

可以通过理论推导得出,均值融合可以降低误差:
avg ⁡ ( E out  ( g t ) ) = avg ⁡ ( E ( g t − G ) 2 ) + E out  ( G ) \operatorname{avg}\left(E_{\text {out }}\left(g_{t}\right)\right)=\operatorname{avg}\left(\mathcal{E}\left(g_{t}-G\right)^{2}\right)+E_{\text {out }}(G) avg(Eout ​(gt​))=avg(E(gt​−G)2)+Eout ​(G)
从上式可以得出除非所有的 g t g_t gt​相等,否则融合后的模型 G G G的误差是要比所有子模型误差的平均小的(相差了一个方差)。

线性融合(Linear Blending)

分类问题:
G ( x ) = sign ⁡ ( ∑ t = 1 T α t ⋅ g t ( x ) )  with  α t ≥ 0 G(\mathbf{x})=\operatorname{sign}\left(\sum_{t=1}^{T} \alpha_{t} \cdot g_{t}(\mathbf{x})\right) \text { with } \alpha_{t} \geq 0 G(x)=sign(t=1∑T​αt​⋅gt​(x)) with αt​≥0
回归问题:
min ⁡ α t ≥ 0 1 N ∑ n = 1 N ( y n − ∑ t = 1 T α t g t ( x n ) ) 2 \min _{\alpha_{t} \geq 0} \frac{1}{N} \sum_{n=1}^{N}\left(y_{n}-\sum_{t=1}^{T} \alpha_{t} g_{t}\left(\mathbf{x}_{n}\right)\right)^{2} αt​≥0min​N1​n=1∑N​(yn​−t=1∑T​αt​gt​(xn​))2
那么最优化问题就可以写为:
min ⁡ α t ≥ 0 1 N ∑ n = 1 N err ⁡ ( y n , ∑ t = 1 T α t g t ( x n ) ) \min _{\alpha t \geq 0} \frac{1}{N} \sum_{n=1}^{N} \operatorname{err}\left(y_{n}, \sum_{t=1}^{T} \alpha_{t} g_{t}\left(\mathbf{x}_{n}\right)\right) αt≥0min​N1​n=1∑N​err(yn​,t=1∑T​αt​gt​(xn​))
使用训练集获取 g t g_t gt​,但是最好使用验证集获取 α t \alpha_t αt​。

Stacking

在这里插入图片描述

如上图所示,第一部分是用 N N N个基础模型如xgb1、lgb1进行 n n n折交叉验证,那么就得到了一个 N ∗ n N *n N∗n的特征矩阵,用这个特征矩阵作为第二层模型的输入。测试时也要把原数据集通过 N N N个基模型映射到 N N N维的空间上去。

这里写图片描述

Bagging

Blending是学到不同的 g t g_t gt​后把他们聚合起来,那能不能边学 g t g_t gt​边聚合。

获得多样性 g t g_t gt​的方法有:

Bootstrap Aggregation

从数据出发,如果能得到很多多样性的数据集 D t D_t Dt​来训练一个 g t g_t gt​就好了。可以用数据重采样获得仿真的 D t D_t Dt​:

  1. 在原有的大小为 N N N 的数据集 D \mathcal{D} D 上, 有放回的采样 N ′ N^{\prime} N′ 次获得仿真数据集 D t → \mathcal{D}_{t} \rightarrow Dt​→ 这一步便是 Bootstrap 操作
  2. 通过 A ( D ~ t ) \mathcal{A}\left(\tilde{\mathcal{D}}_{t}\right) A(D~t​) 获取 g t g_{t} gt​, 再使用均值融合获得: G = Uniform ⁡ ( { g t } ) G=\operatorname{Uniform}\left(\left\{g_{t}\right\}\right) G=Uniform({gt​}) 。

Boostrap方法合理前提是:数据集的多样性和基算法 A \mathcal A A对于随机数据敏感。

Adaptive Boosting (AdaBoost )实际上是从 Bagging 的核心 bootstrap 出发实现的一种融合算法,下面具体介绍。

AdaBoost

AdaBoost的核心思想是当前所有模型错分类的数据会被强化,训练下个弱分类器。最终所有弱分类器投票。一个经典的示意图:
在这里插入图片描述

简单图示算法流程:

img image-20210504000249484

算法流程

对二元分类问题总结一下:

输入为样本集 D = { ( x , y 1 ) , ( x 2 , y 2 ) , … ( x n , y n ) } D=\left\{\left(x, y_{1}\right),\left(x_{2}, y_{2}\right), \ldots\left(x_{n}, y_{n}\right)\right\} D={(x,y1​),(x2​,y2​),…(xn​,yn​)},,弱学习器算法, 弱学习器迭代次数 T T T。

输出为最终的强学习器 G ( x ) G(x) G(x)。

  1. 初始化样本集权重为

u ( 1 ) = [ 1 N , 1 N , ⋯   , 1 N ] \mathbf{u}^{(1)}=\left[\frac{1}{N}, \frac{1}{N}, \cdots, \frac{1}{N}\right] u(1)=[N1​,N1​,⋯,N1​]

  1. 对于 t = 1 , 2 , . . . , T t = 1, 2,...,T t=1,2,...,T:

    (a) 使用具有权重 u ( t ) \mathbf{u}^{(t)} u(t)的样本集来训练数据,得到弱学习器 g t ( x ) g_t(x) gt​(x)

    (b) 计算 g t ( x ) g_t(x) gt​(x)的分类误差率
    ϵ t = ∑ n = 1 N u n ( t ) [ y n ≠ g t ( x n ) ] ∑ n = 1 N u n ( t ) \epsilon_{t}=\frac{\sum_{n=1}^{N} u_{n}^{(t)} [ y_{n} \neq g_{t}\left(\mathbf{x}_{n}\right) ]}{\sum_{n=1}^{N} u_{n}^{(t)}} ϵt​=∑n=1N​un(t)​∑n=1N​un(t)​[yn​​=gt​(xn​)]​
    © 更新样本集的权重分布:分类对的样本,权重 u n ( t + 1 ) ← u n ( t ) ⋅ 1 − ϵ t ϵ t u_{n}^{(t+1)} \leftarrow u_{n}^{(t)} \cdot \sqrt{\frac{1-\epsilon_{t}}{\epsilon_{t}}} un(t+1)​←un(t)​⋅ϵt​1−ϵt​​ ​;分类错的样本,权重 u n ( t + 1 ) ← u n ( t ) / 1 − ϵ t ϵ t u_{n}^{(t+1)} \leftarrow u_{n}^{(t)} / \sqrt{\frac{1-\epsilon_{t}}{\epsilon_{t}}} un(t+1)​←un(t)​/ϵt​1−ϵt​​

    (d) 计算弱分类器的系数:
    α t = ln ⁡ ( 1 − ϵ t ϵ t ) \alpha_{t}=\ln \left( \sqrt{\frac{1-\epsilon_{t}}{\epsilon_{t}}} \right) αt​=ln(ϵt​1−ϵt​​ ​)

  2. 最终构建的分类器为:

G ( x ) = sign ⁡ ( ∑ t = 1 T α t g t ( x ) ) G(\mathbf{x})=\operatorname{sign}\left(\sum_{t=1}^{T} \alpha_{t} g_{t}(\mathbf{x})\right) G(x)=sign(t=1∑T​αt​gt​(x))

这里最弱的分类器可以是一个decision stump(单层决策树),只有三个参数:选择一个特征 i i i,设定一个阈值 θ \theta θ,判定阈值左右是什么类 s s s。

标签:Bagging,01,mathbf,sum,gt,right,AdaBoost,sign,left
来源: https://blog.csdn.net/yanguang1470/article/details/122621059