Framework of Ensemble

笔记:ML-LHY-22: Ensemble
简单来说,Ensemble就是组合多种不同的模型进行学习的方式。

Bagging

笔记:ML-LHY-22: Ensemble
简单的model:大的Bias,小的Variance
复杂的model:小的Bias,大的Variance
组合的情况下,Error rate随着model的复杂度下降然后又升高。
笔记:ML-LHY-22: Ensemble

有多个复杂的model进行平均,就能达到小的bias和小的variance。bagging要做的就是这个事情。

步骤:
笔记:ML-LHY-22: Ensemble
对原来训练数据进行放回采用,比如上面采样4次,有可能一笔数据在多个子集合用到。
笔记:ML-LHY-22: Ensemble
regression用average
classifier用voting

注意:只有再模型很复杂,很容易overfitting时候,为了减轻variance,才选用bagging方法。一般NN不是很容易overfitting的方法,而decision tree是个很容易overfitting的方法

Decision Tree

Decision Tree做bagging的版本就是随机森林(random forest)
笔记:ML-LHY-22: Ensemble
Decision Tree可以在training data上达到100%准确度是很容易的,就是没笔data都作为树的叶子。但是,这也就是明显的overfitting,不见得在validation上有很好的performance。

Experiment: Function of Miku

笔记:ML-LHY-22: Ensemble
对这样的数据进行分类实验。

笔记:ML-LHY-22: Ensemble
深度为5可以想象Decision Tree的每个节点范围都是比较大的,比如level1: 100 < x < 200 100<x<200 100<x<200 level2: 300 < y < 400 300<y<400 300<y<400 是1
。所以分的不是很精确,然后随着深度提升,精度越来越高。

Random Forest

实现Random Forest可以用传统sample的方法,但是performance是和没用差不多的。
一般Random Forest是随机限制那些分支或者问题。

如果使用bagging,是不用把labeled data分成training data和validation data的。但是有 一样的validation,具体做:
笔记:ML-LHY-22: Ensemble

分成4个子集个,比如训练f1的时候只用了第3,4笔数据。
笔记:ML-LHY-22: Ensemble
Random Forest结果:
笔记:ML-LHY-22: Ensemble
可以看到更加平滑。

Boosting

Bagging使用在很复杂的model上,而Boosting是用在比较简单的model上

Guarantee

笔记:ML-LHY-22: Ensemble

Framework of boosting

笔记:ML-LHY-22: Ensemble
需要注意的是:The classifiers are learned sequentially,先找f1后才知道怎么找f2.

How to obtain different classifiers?

当有不同的训练数据时,就获得了不同的classifier
问题变成怎么找不同的训练数据:

  • Re-sampling :和Bagging一样使用放回采样得到新的训练集
  • Re-weighting:对数据加上不同的weight得到的训练集,在Re-sampling中如果一笔data用了2次,那么weight就是2,Re-weighting可以用小数罢了
    笔记:ML-LHY-22: Ensemble
    事实上,Re-weighting只是改变不同数据对loss的侧重。

Adaboost

找会在f1上烂掉的新的训练数据(reweight training example),作为f1的训练数据
问题变成怎么找会在f1上烂掉的新的训练数据:
先来看一下在f1上的错误率 ε 1 \varepsilon_{1} ε1怎么算:
ε 1 = ∑ n u 1 n δ ( f 1 ( x n ) ≠ y ^ n ) ∑ n u 1 n \varepsilon_{1}=\frac{\sum_{n} u_{1}^{n} \delta\left(f_{1}\left(x^{n}\right) \neq \hat{y}^{n}\right)}{\sum_{n} u_{1}^{n}} ε1=nu1nnu1nδ(f1(xn)=y^n)
一笔来说,初始的f1,除非是随机,再差也会小于0.5,即 ε 1 < 0.5 \varepsilon_{1}<0.5 ε1<0.5

u 1 n u_{1}^{n} u1n变成 u 2 n u_{2}^{n} u2n,还是在这些数据上,用了 u 2 n u_{2}^{n} u2n后,使得:
∑ n u 2 n δ ( f 1 ( x n ) ≠ y ^ n ) ∑ n u 2 n = 0.5 \frac{\sum_{n} u_{2}^{n} \delta\left(f_{1}\left(x^{n}\right) \neq \hat{y}^{n}\right)}{\sum_{n} u_{2}^{n}}=0.5 nu2nnu2nδ(f1(xn)=y^n)=0.5
然后用 u 2 n u_{2}^{n} u2n作为weight的数据,去训练f2。那么f2就是和f1互补的。

下面是这么找 u 2 n u_{2}^{n} u2n步骤:
笔记:ML-LHY-22: Ensemble
比如上面的f1,错误率是0.25
u 2 n u_{2}^{n} u2n要做的就是分类正确的examp对应的u变小,分类错误的examp对应的u变大。这样错误率就变为0.5了。然后就得到 u 2 n u_{2}^{n} u2n了,然后用 u 2 n u_{2}^{n} u2n作为weight的数据训练f2,错误率又会小于0.5。并且f2和f1是互补的。

笔记:ML-LHY-22: Ensemble
怎么求 d 1 d_{1} d1呢?

笔记:ML-LHY-22: Ensemble
最后分子分母倒了一下,本来是 = 0.5的。
笔记:ML-LHY-22: Ensemble
嘿嘿,最后就推导了 d 1 = ( 1 − ε 1 ) / ε 1 > 1 d_{1}=\sqrt{\left(1-\varepsilon_{1}\right) / \varepsilon_{1}}>1 d1=(1ε1)/ε1 >1,比如上面的 ε 1 = 0.25 \varepsilon_{1} = 0.25 ε1=0.25,带进去求得的的 d 1 = ( 1 − 0.25 ) / 0.25 = 3 d_{1}=\sqrt{\left(1-0.25\right) / 0.25} = \sqrt{3} d1=(10.25)/0.25 =3


AdaBoost算法:

  • 给定训练数据
    { ( x 1 , y ^ 1 , u 1 1 ) , ⋯   , ( x n , y ^ n , u 1 n ) , ⋯   , ( x N , y ^ N , u 1 N ) } y ^ = ± 1  (Binary classification),  u 1 n = 1  (equal weights)  \left\{\left(x^{1}, \hat{y}^{1}, u_{1}^{1}\right), \cdots,\left(x^{n}, \hat{y}^{n}, u_{1}^{n}\right), \cdots,\left(x^{N}, \hat{y}^{N}, u_{1}^{N}\right)\right\} \\ \hat{y}=\pm 1 \text { (Binary classification), } u_{1}^{n}=1 \text { (equal weights) } {(x1,y^1,u11),,(xn,y^n,u1n),,(xN,y^N,u1N)}y^=±1 (Binary classification), u1n=1 (equal weights) 

  • 迭代 t = 1 , … , T \mathrm{t}=1, \ldots, \mathrm{T} t=1,,T:

    • 使用 { u t 1 , ⋯   , u t N } \left\{u_{t}^{1}, \cdots, u_{t}^{N}\right\} {ut1,,utN}作为weight的数据来训练比较弱的的 f t ( x ) f_t(x) ft(x)分类器
    • 计算训练得到的错误率 ε t \varepsilon_{t} εt
    • 迭代 n = 1 , … , N n=1, \ldots, N n=1,,N
      • 如果 x n x^{n} xn f t ( x ) f_t(x) ft(x)分类器分错:
      • u t + 1 n = u t n × d t = u t n × exp ⁡ ( α t ) u_{t+1}^{n}=u_{t}^{n} \times d_{t}=u_{t}^{n} \times \exp \left(\alpha_{t}\right) ut+1n=utn×dt=utn×exp(αt)
      • 否则:
      • u t + 1 n = u t n / d t = u t n × exp ⁡ ( − α t ) u_{t+1}^{n}=u_{t}^{n} / d_{t}=u_{t}^{n} \times \exp \left(-\alpha_{t}\right) ut+1n=utn/dt=utn×exp(αt)
      • 也可写成一步: u t + 1 n ← u t n × exp ⁡ ( − y ^ n f t ( x n ) α t ) u_{t+1}^{n} \leftarrow u_{t}^{n} \times \exp \left(-\hat{y}^{n} f_{t}\left(x^{n}\right) \alpha_{t}\right) ut+1nutn×exp(y^nft(xn)αt)

其中, d t = ( 1 − ε t ) / ε t d_{t}=\sqrt{\left(1-\varepsilon_{t}\right) / \varepsilon_{t}} dt=(1εt)/εt α t = ln ⁡ ( 1 − ε t ) / ε t \alpha_{t}=\ln \sqrt{\left(1-\varepsilon_{t}\right) / \varepsilon_{t}} αt=ln(1εt)/εt


得到了 f 1 ( x ) , … , f t ( x ) . . , f T ( x ) f_{1}(x), \ldots, f_{t}(x). ., f_{T}(x) f1(x),,ft(x)..,fT(x),怎么叠加起来,得到测试的输出结果?
笔记:ML-LHY-22: Ensemble
使用不一样的权重,表示错误率的分类器 α t \alpha_{t} αt会更大。

Toy Example

笔记:ML-LHY-22: Ensemble
笔记:ML-LHY-22: Ensemble

笔记:ML-LHY-22: Ensemble
笔记:ML-LHY-22: Ensemble
对于右下角:f1和f2都认为蓝色,权重之和为1.08,f3认为是红色,权重为0.95.所以最终右下角是蓝色。类似的其他块。3个weak的classifier组合起来就可以得到好的结果。

Warning of Math

H ( x ) = sign ⁡ ( ∑ t = 1 T α t f t ( x ) ) α t = ln ⁡ ( 1 − ε t ) / ε t H(x)=\operatorname{sign}\left(\sum_{t=1}^{T} \alpha_{t} f_{t}(x)\right) \quad \alpha_{t}=\ln \sqrt{\left(1-\varepsilon_{t}\right) / \varepsilon_{t}} H(x)=sign(t=1Tαtft(x))αt=ln(1εt)/εt
证明:更多的classifier: f t f_{t} ft,即迭代更多次, H ( x ) H(x) H(x)在训练数据上会有更小的错误率。

笔记:ML-LHY-22: Ensemble
这里提出 1 N ∑ n exp ⁡ ( − y ^ n g ( x n ) ) \frac{1}{N} \sum_{n} \exp \left(-\hat{y}^{n} g\left(x^{n}\right)\right) N1nexp(y^ng(xn))作为 H ( x ) H(x) H(x)的上界。所以我们要证明 H ( x ) H(x) H(x)随着迭代次数增加这个上界会越来越小。
注意: g ( x n ) = ∑ t = 1 T α t f t ( x ) g\left(x^{n}\right) = \sum_{t=1}^{T} \alpha_{t} f_{t}(x) g(xn)=t=1Tαtft(x),所以上界是会随着迭代次数t变换的。

先定义 Z t Z_{t} Zt f t f_{t} ft这个classifier对应的训练数据的权重和。

笔记:ML-LHY-22: Ensemble
所以就有:
1 N ∑ exp ⁡ ( − y ^ n g ( x n ) ) = 1 N Z T + 1 \frac{1}{N} \sum \exp \left(-\hat{y}^{n} g\left(x^{n}\right)\right)=\frac{1}{N} Z_{T+1} N1exp(y^ng(xn))=N1ZT+1
那么证明 Z t Z_{t} Zt随着 t t t递减就行了。
笔记:ML-LHY-22: Ensemble
其中, Z t = Z t − 1 ε t exp ⁡ ( α t ) + Z t − 1 ( 1 − ε t ) exp ⁡ ( − α t ) Z_{t}=Z_{t-1} \varepsilon_{t} \exp \left(\alpha_{t}\right)+Z_{t-1}\left(1-\varepsilon_{t}\right) \exp \left(-\alpha_{t}\right) Zt=Zt1εtexp(αt)+Zt1(1εt)exp(αt)
是比较直观的一种做法, Z t Z_{t} Zt f t f_{t} ft对应的训练数据的权重和。 Z t − 1 ε t Z_{t-1} \varepsilon_{t} Zt1εt表示分类错误的部分,乘上 exp ⁡ ( α t ) = d t \exp \left(\alpha_{t}\right) = d_{t} exp(αt)=dt,正确部分同理。

最终推导错误率的上界形式:
∏ t = 1 T 2 ε t ( 1 − ε t ) \prod_{t=1}^{T} 2 \sqrt{\varepsilon_{t}\left(1-\varepsilon_{t}\right)} t=1T2εt(1εt)
由于: 2 ϵ t ( 1 − ϵ t ) < 1 2 \sqrt{\epsilon_{t}\left(1-\epsilon_{t}\right)} < 1 2ϵt(1ϵt) <1,累乘会越来越小。所以上界越来越小,也就可以证明:迭代更多次, H ( x ) H(x) H(x)在训练数据上会有更小的错误率。


发现Adaboost在train时在迭代5次时已经达到0了,但继续迭代,test时还会继续下降。
笔记:ML-LHY-22: Ensemble

Margin的定义
笔记:ML-LHY-22: Ensemble
我们希望 y ^ \hat{y} y^ g ( x ) g(x) g(x)不只是同号,还希望它们相乘越大越好。

笔记:ML-LHY-22: Ensemble
迭代5次的时候,从CDF来看,在margin为0.7附近时,不会再有数据可以使得margin提升。说明迭代5次时training data上 y ^ n g ( x n ) \hat{y}^{n} g\left(x^{n}\right) y^ng(xn)都大于0。而迭代100次就一直会有数据使得margin提升(CDF的导数为概率密度不为0)。

为什么Adaboost可以让margin增加?
笔记:ML-LHY-22: Ensemble
之前已经说了,Adaboost的上界是图上标记的那条。我们期望减小上界来减少错误率。目标函数也就变成 ∏ t = 1 T 2 ε t ( 1 − ε t ) \prod_{t=1}^{T} 2 \sqrt{\varepsilon_{t}\left(1-\varepsilon_{t}\right)} t=1T2εt(1εt) ,它是随着t减少的。


笔记:ML-LHY-22: Ensemble

Gradient Boosting

从梯度下降方法来看Adaboost
笔记:ML-LHY-22: Ensemble

H ( x ) H(x) H(x)和上面一样,迭代T次对 f t f_{t} ft加权累加,期望输出和真实值越大越好(也同号)。
我们从梯度下降角度出发,有这么一个损失函数:
L ( g ) = ∑ n l ( y ^ n , g ( x n ) ) L(g)=\sum_{n} l\left(\hat{y}^{n}, g\left(x^{n}\right)\right) L(g)=nl(y^n,g(xn))
函数l可以是cross entropy或者mse。这里我们假设是: ∑ n exp ⁡ ( − y ^ n g ( x n ) ) \sum_{n} \exp \left(-\hat{y}^{n} g\left(x^{n}\right)\right) nexp(y^ng(xn))笔记:ML-LHY-22: Ensemble
g t ( x ) g_{t}(x) gt(x)怎么看做是参数?可以这么理解:
输入 g t ( x 1 ) g_{t}(x_1) gt(x1),得到一个参数 g t ( x 1 ) g_{t}(x_1) gt(x1)
输入 g t ( x 2 ) g_{t}(x_2) gt(x2),得到一个参数 g t ( x 2 ) g_{t}(x_2) gt(x2)
无穷多个点,就是输入 g t ( x ) g_{t}(x) gt(x),得到一个参数 g t ( x ) g_{t}(x) gt(x)
然后做GD,我们希望下降的方向和Adaboost优化的方向一样:
笔记:ML-LHY-22: Ensemble
就是找 f t f_{t} ft使得乘积最大。发现这个式子的weight就是Adaboost的weight : u t n u_{t}^{n} utn,也就是说GD每次更新和Adaboost是一样,那么最后得到的 f t f_{t} ft也是一样。

笔记:ML-LHY-22: Ensemble
α t \alpha_{t} αt要是的loss最小,也就是对 α t \alpha_{t} αt求导要为0,最后求得的 α t \alpha_{t} αt和Adaboost一样。
要注意的是:Gradient Boosting可以改Objective Function,不一定非要是 ∑ n exp ⁡ ( − y ^ n g ( x n ) ) \sum_{n} \exp \left(-\hat{y}^{n} g\left(x^{n}\right)\right) nexp(y^ng(xn))

Stacking

笔记:ML-LHY-22: Ensemble
投票方式可能会存在个别非常差的model影响整个model输出。

笔记:ML-LHY-22: Ensemble
Final Classifier不需要太复杂,只需要Logistic Regression就行了。注意训练数据要分2份,防止有故意拟合Training data的model。

以上参考李宏毅老师视频和ppt,仅作为学习笔记交流使用

相关文章: