机器学习——多模型选择和融合的方法(Validation & Blending & Bagging)

在学习这之前,先来看一个衡量泛化误差的方法——偏差-方差分解(bias-variance decomposition)

一个机器学习模型的泛化误差主要由3个部分组成,即:偏差(bias),方差(variance)和噪声(nosie),

泛化误差=bias + variance + noise

若有一个数据集 D D D D D D中有一堆测试样本 x x x,其对应的标签集为 y D y_D yD,而其对应的正式标签(ground truth)为 y y y,而 f ( x ; D ) f(x;D) f(x;D)为训练集 D D D上学得的模型 f f f x x x上的预测输出。

  • 若以回归任务为例,则学习算法的期望预测为,
    f − ( x ) = E D ( f ( x ; D ) ) \mathop f\limits^ - (x) = {E_D}(f(x;D)) f(x)=ED(f(x;D))

  • 则使用样本数相同的不同训练集产生方差(variance) 为,
    v a r ( x ) = E D ( ( f ( x ; D ) − f − ( x ) ) 2 ) {\mathop{\rm var}} (x) = {E_D}({(f(x;D) - \mathop f\limits^ - (x))^2}) var(x)=ED((f(x;D)f(x))2)
    这里的方差描述的实际上还是一个算法当使用不同的数据集时,其在均值附近的波动程度。若方差大,则说明该算法在数据集变化后,输出变化也比较大,不稳定,发生了过拟合

  • 偏差(bias) 描述的是期望输出与真实值之间的差别,
    b i a s 2 ( x ) = ( f − ( x ) − y ) 2 bia{s^2}(x) = {(\mathop f\limits^ - (x) - y)^2} bias2(x)=(f(x)y)2
    可以看出,当偏差较大时,算法的期望预测值偏离真实值较多,发生了欠拟合

  • 这里的噪声(noise) 其实描述的是数据集上的属性,即数据集上弄错的样本,因为数据集本身的获取也是有可能出现错误的。数据集的标签 y D y_D yD与真实值 y y y的差别为噪声,
    ε 2 = E D ( ( y D − y ) 2 ) {\varepsilon ^2} = {E_D}({({y_D} - y)^2}) ε2=ED((yDy)2)

为了方便分析,可以假定数据集全是与真实值相符合的样本( y D = y y_D=y yD=y),即噪声为0, ε = E D ( y D − y ) = 0 {\varepsilon } = {E_D}{({y_D} - y)=0} ε=ED(yDy)=0,则算法的期望泛化误差可以分解如下,
E ( f ; D ) = E D [ ( f ( x ; D ) − y D ) 2 ]                        =    E D [ ( f ( x ; D ) − f − ( x ) + f − ( x ) − y D ) 2 ]                        =    E D [ ( f ( x ; D ) − f − ( x ) ) 2 ] + E D [ ( f − ( x ) − y D ) 2 ] + E D [ 2 ( f ( x ; D ) − f − ( x ) ) ( f − ( x ) − y D ) ] ⎵ = 0                        =    E D [ ( f ( x ; D ) − f − ( x ) ) 2 ] + E D [ ( f − ( x ) − y D ) 2 ]                        =    E D [ ( f ( x ; D ) − f − ( x ) ) 2 ] + E D [ ( f − ( x ) − y + y − y D ) 2 ]                        =    E D [ ( f ( x ; D ) − f − ( x ) ) 2 ] + E D [ ( f − ( x ) − y ) 2 ] + E D [ ( y − y D ) 2 ] + 2 E D [ ( f − ( x ) − y ) ( y − y D ) ] ⎵ = 0                        =    E D [ ( f ( x ; D ) − f − ( x ) ) 2 ] ⎵ v a r i a n c e + E D [ ( f − ( x ) − y ) 2 ] ⎵ b i a s + E D [ ( y − y D ) 2 ] ⎵ n o i s e \begin{array}{l} E(f;D) = {E_D}[{(f(x;D) - {y_D})^2}]\\\\ \;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} = \;{E_D}[{(f(x;D) - \mathop f\limits^ - (x) + \mathop f\limits^ - (x) - {y_D})^2}]\\\\ \;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} = \;{E_D}[{(f(x;D) - \mathop f\limits^ - (x))^2}] + {E_D}[{(\mathop f\limits^ - (x) - {y_D})^2}] + \underbrace {{E_D}[2(f(x;D) - \mathop f\limits^ - (x))(\mathop f\limits^ - (x) - {y_D})]}_{ = 0}\\\\ \;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} = \;{E_D}[{(f(x;D) - \mathop f\limits^ - (x))^2}] + {E_D}[{(\mathop f\limits^ - (x) - {y_D})^2}]\\\\ \;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} = \;{E_D}[{(f(x;D) - \mathop f\limits^ - (x))^2}] + {E_D}[{(\mathop f\limits^ - (x) - y + y - {y_D})^2}]\\\\ \;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} = \;{E_D}[{(f(x;D) - \mathop f\limits^ - (x))^2}] + {E_D}[{(\mathop f\limits^ - (x) - y)^2}] + {E_D}[{(y - {y_D})^2}] + \underbrace {2{E_D}[(\mathop f\limits^ - (x) - y)(y - {y_D})]}_{ = 0}\\\\ \;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} = \;\underbrace {{E_D}[{{(f(x;D) - \mathop f\limits^ - (x))}^2}]}_{{\rm{variance}}} + \underbrace {{E_D}[{{(\mathop f\limits^ - (x) - y)}^2}]}_{bias} + \underbrace {{E_D}[{{(y - {y_D})}^2}]}_{noise} \end{array} E(f;D)=ED[(f(x;D)yD)2]=ED[(f(x;D)f(x)+f(x)yD)2]=ED[(f(x;D)f(x))2]+ED[(f(x)yD)2]+=0 ED[2(f(x;D)f(x))(f(x)yD)]=ED[(f(x;D)f(x))2]+ED[(f(x)yD)2]=ED[(f(x;D)f(x))2]+ED[(f(x)y+yyD)2]=ED[(f(x;D)f(x))2]+ED[(f(x)y)2]+ED[(yyD)2]+=0 2ED[(f(x)y)(yyD)]=variance ED[(f(x;D)f(x))2]+bias ED[(f(x)y)2]+noise ED[(yyD)2]

接下来,再看一下偏差、方差和噪声的含义,

  • 偏差:预测值和真实值之间的偏离程度,描述了学习算法本身的拟合能力
  • 方差:度量了同样大小的训练集在发生变动后,其学习性能的变化,描述了数据变动对算法学习性能的影响
  • 噪声:数据集本身的正确程度,同时这也决定了学习算法所能达到的泛化误差的下界,描述了学习问题本身的学习难度

当有多个hypotheses g 1 , ⋯   , g T {g_1}, \cdots ,{g_T} g1,,gT,这些hypothesis多样且不同,多样性的原因有以下几个方面:

  • 模型不同 g 1 ∈ H 1 , g 2 ∈ H 2 , ⋯ g T ∈ H T {g_1} \in {{\rm H}_1},{g_2} \in {{\rm H}_2}, \cdots {g_T} \in {{\rm H}_T} g1H1,g2H2,gTHT
    其中, H i {{\rm H}_i} Hi为模型i的hypothesis set, g i g_i gi是通过最小化 E i n E_{in} Ein得到的。所以,所选的模型不同,得到的 g g g也不同。
  • 求解选取的参数不同:在用梯度下降法(GD)求解模型参数的过程中,学习率 η = 0.001 , 0.01 , ⋯   , 10 \eta = 0.001,0.01, \cdots ,10 η=0.001,0.01,,10,当 η \eta η不同时,所求得的模型解也就不同,得到的 g g g也不同。
  • 一些算法具有随机性:之前所说的PLA,就是随机选取错误的分类点来更新模型解的,这种随机性会导致 g g g的不同。
  • 数据随机性:做交叉验证时,根据所划分的不同的训练集和验证集,可以得到不同的 g g g

当有了这些形形色色的 g g g之后,此时应如何综合以上hypotheses来做出相对科学的预测?

下面有四种方法:

  • Validation: 加入验证集后,选择一个表现最好(即, E v a l E_{val} Eval最小)的作为预测模型。
    G ( x ) = g t ∗ ( x ) w i t h t ∗ = arg ⁡ min ⁡ t ∈ { 1 , 2 , ⋯   , T } E v a l ( g t − ) G(x) = {g_{{t_*}}}(x){\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} with{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {t_*} = \arg {\min _{t \in \{ 1,2, \cdots ,T\} }}{E_{val}}(g_t^ - ) G(x)=gt(x)witht=argt{1,2,,T}minEval(gt)

  • Uniform Blending:综合考虑所有的 g g g,且是机会均等的考虑,即每个 g g g的权重相同,最后用平均值作为预测值。

    • for classification :
      G ( x ) = s i g n ( ∑ t = 0 T 1 ⋅ g t ( x ) ) G(x) = sign(\sum\limits_{t = 0}^T {1 \cdot {g_t}(x)} ) G(x)=sign(t=0T1gt(x))
    • for regression
      G ( x ) = 1 T ∑ t = 0 T g t ( x ) G(x) = \frac{1}{T}\sum\limits_{t = 0}^T {{g_t}(x)} G(x)=T1t=0Tgt(x)
  • Linear Blending:综合考虑所有的 g g g,每个 g g g的考虑机会不均等,即给每个 g t g_t gt的一个权值 α t {\alpha _t} αt,最后加权平均值作为预测值。
    G ( x ) = s i g n ( ∑ t = 1 T α t ⋅ g t ( x ) )      w i t h      α t ≥ 0 G(x) = sign(\sum\limits_{t = 1}^T {{\alpha _t} \cdot {g_t}(x)} )\;\;with\;\;{\alpha _t} \ge 0 G(x)=sign(t=1Tαtgt(x))withαt0
    那么,其实可以看出前两种是此种情况的特例,
    α t = [ [ E v a l ( g t − )        s m a l l e s t ] ] {\alpha _t} = \left[\kern-0.15em\left[ {{E_{val}}(g_t^ - )\;\;\;smallest} \right]\kern-0.15em\right] αt=[[Eval(gt)smallest]]时,为第一种情况;
    α t = 1 {\alpha _t} = 1 αt=1时,为第二种情况。

  • Any Blending(Stacking):综合考虑所有的 g g g,每个 g g g的考虑机会不均等,但每个 g t g_t gt之间是一种非线性关系,最后取平均值作为预测值。
    G ( x ) = s i g n ( ∑ t = 1 T q t ( x ) ⋅ g t ( x ) )    w i t h      q t ( x ) ≥ 0 G(x) = sign(\sum\limits_{t = 1}^T {{q_t}(x) \cdot {g_t}(x)} )\;with\;\;{q_t}(x) \ge 0 G(x)=sign(t=1Tqt(x)gt(x))withqt(x)0
    不难看出,第三种情况其实就是此种情况在 q t ( x ) = α t {q_t}(x) = {\alpha _t} qt(x)=αt时的一个特例。


Validation

这里假设有M个模型,对应有M个hypothesis,即 H 1 , H 2 , ⋯   , H M {H_1},{H_2}, \cdots ,{H_M} H1,H2,,HM,产生的算法为 A 1 , A 2 , ⋯   , A M {A_1},{A_2}, \cdots ,{A_M} A1,A2,,AM。由这些演算法,就能得出M个不同的模型解 g 1 , g 2 , ⋯   , g M g_1,g_2,\cdots,g_M g1,g2,,gM。那么,我们的目标是,如何选择一个最好的模型解 g m ∗ g_{m^*} gm,使其 E o u t ( g m ∗ ) {E_{out}}({g_{{m^*}}}) Eout(gm)最小。

下面有几个观点:

  • E i n E_{in} Ein最小化:对M个模型分别在数据集D上计算 E i n E_{in} Ein,再横向比较,取 E i n E_{in} Ein最小的那个 g g g作为最优模型解 g m ∗ g_{m^*} gm
    m ∗ = arg ⁡ min ⁡ 1 ≤ m ≤ M ( E m = E i n ( A m ( D ) ) ) {m^*} = \mathop {\arg \min }\limits_{1 \le m \le M} ({E_m} = {E_{in}}({A_m}(D))) m=1mMargmin(Em=Ein(Am(D)))
    但这明显实不科学的,原因由两点:第一, E i n E_{in} Ein足够小并不能表示模型好,反而可能会使模型过拟合,泛化能力差;第二,它的VC维会很高,计算量大,模型复杂度高。

  • E t e s t E_{test} Etest最小化:在一个独立于训练样本的测试集上,将M个模型在测试集上进行测试,选取 E t e s t E_{test} Etest最小的模型作为最佳模型,
    m ∗ = arg ⁡ min ⁡ 1 ≤ m ≤ M ( E m = E t e s t ( A m ( D ) ) ) {m^*} = \mathop {\arg \min }\limits_{1 \le m \le M} ({E_m} = {E_{test}}({A_m}(D))) m=1mMargmin(Em=Etest(Am(D)))
    这种做法是能提高预测性能的,因为根据Hoffding不等式,有,
    E o u t ( g m ∗ ) ≤ E t e s t ( g m ∗ ) + O ( log ⁡ M N t e s t ) {E_{out}}({g_{{m^*}}}) \le {E_{test}}({g_{{m^*}}}) + O(\sqrt {\frac{{\log M}}{{{N_{test}}}}} ) Eout(gm)Etest(gm)+O(NtestlogM )模型的个数M越少,测试集数目越大,那么上式中的第二项就会很小, E t e s t ( g m ∗ ) {E_{test}}({g_{{m^*}}}) Etest(gm)会更加接近于 E o u t ( g m ∗ ) {E_{out}}({g_{{m^*}}}) Eout(gm)
    但由于一般我们能拿到的就只有训练集,测试集是拿不到的,所以此种方法的局限性也比较大。

那么,基于前面两种方法,我们可以把数据集D分为两个部分,从数据集D中抽出K个数据作为验证集 D v a l D_{val} Dval,对应的error叫 D v a l D_{val} Dval,但是 D v a l D_{val} Dval必须保证独立同分布于P(x,y),即 D v a l D_{val} Dval是从数据集D中平均随机抽样得到的;而另一部分就是供模型选择的训练数据 D t r a i n D_{train} Dtrain,大小为 N − K N-K NK

E i n ( h )                                                         E v a l ( h )    ↑                                         ↑ D ⎵ s i z e      N → D t r a i n ⎵ s i z e      N − K ∪ D v a l ⎵ s i z e      K ↓                                                                                                    ↓ g m = A m ( D )                                                 g m − = A m ( D t r a i n ) \begin{array}{l} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {E_{in}}(h){\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \;\;\;\;\;{E_{val}}(h){\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \\ \;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \uparrow \;\;\;\;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \uparrow \\\\ {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \underbrace D_{size\;\;N}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \to {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \underbrace {{D_{train}}}_{size\;\;N - K}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \cup {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \underbrace {{D_{val}}}_{size\;\;K}\\\\ {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \downarrow \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} \downarrow \\ {g_m} = {A_m}(D)\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} g_m^ - = {A_m}({D_{train}}) \end{array} Ein(h)Eval(h)sizeN DsizeNK DtrainsizeK Dvalgm=Am(D)gm=Am(Dtrain)

首先,就是从 D t r a i n D_{train} Dtrain中对各个模型进行训练,选择各自最好的模型解,记为 g m − g_m^- gm,它是通过在数据集 D t r a i n D_{train} Dtrain上最小化 E t r a i n {E_{train}} Etrain得到的。

然后使用 g m − g_m^- gm D v a l D_{val} Dval进行验证,各个 g m − g_m^- gm之间比较 E v a l E_{val} Eval的大小(横向比较),从M个模型中选择 E v a l E_{val} Eval最小的作为最终的模型,
m ∗ = arg ⁡ min ⁡ 1 ≤ m ≤ M ( E m = E v a l ( A m ( D t r a i n ) ) ) {m^*} = \mathop {\arg \min }\limits_{1 \le m \le M} ({E_m} = {E_{val}}({A_m}({D_{train}}))) m=1mMargmin(Em=Eval(Am(Dtrain)))

但是,最后,我们的预测模型解并不是 g m − g_m^- gm,因为根据learning cruve,很容易知道,训练样本越多,得到的模型越精确,所以在总样本D上训练得出的 E o u t E_{out} Eout要比在 D t r a i n D_{train} Dtrain训练得到的 E o u t E_{out} Eout要小,若总样本D对应的最好的模型解为 g m ∗ g_{m^*} gm,则有,
E o u t ( g m ∗ ⎵ A m ∗ ( D ) ) ≤ E o u t ( g m ∗ − ⎵ A m ∗ ( D t r a i n ) ) {E_{out}}(\underbrace {{g_{{m^*}}}}_{{A_{{m^*}}}(D)}) \le {E_{out}}(\underbrace {g_{m^*}^ - }_{{A_{{m^*}}}({D_{train}})}) Eout(Am(D) gm)Eout(Am(Dtrain) gm)

所以,一般来说,通常的做法就是通过 D v a l D_{val} Dval来选择最好的 g m − g_m^- gm对应的模型 m ∗ m^* m,再用总样本集D使用该模型进行训练,最终得到的解是总样本上的解,即, g m ∗ g_{m^*} gm

各个部分的不等式满足,
E o u t ( g m ∗ ) ≤ E o u t ( g m ∗ − ) ≤ E v a l ( g m ∗ − ) + O ( log ⁡ M K ) {E_{out}}({g_{{m^*}}}) \le {E_{out}}(g_{{m^*}}^ - ) \le {E_{val}}(g_{{m^*}}^ - ) + O(\sqrt {\frac{{\log M}}{K}} ) Eout(gm)Eout(gm)Eval(gm)+O(KlogM )

那么,接下来,讨论一下如何设置验证集K的大小?
根据上式,有如下关系,
E o u t ( g )          ≈          E o u t ( g − )          ≈          E v a l ( g − )          ( s m a l l K )               ( l a r g e K ) \begin{array}{l} {E_{out}}(g)\;\;\;\; \approx \;\;\;\;{E_{out}}({g^ - })\;\;\;\; \approx \;\;\;\;{E_{val}}({g^ - })\\ \;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} ({\kern 1pt} small{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} K)\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \;({\rm{large}}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} K) \end{array} Eout(g)Eout(g)Eval(g)(smallK)(largeK)

当K很小时, D t r a i n D_{train} Dtrain与D差别较小, g m − ≈ g m g_m^ - \approx {g_m} gmgm,但是,此时验证集样本数很少, E v a l 和 E o u t E_{val}和E_{out} EvalEout可能差别很大;当K很大时,验证集样本数很大,此时的 E v a l E_{val} Eval可能会非常逼近 E o u t E_{out} Eout,但是, D t r a i n D_{train} Dtrain的样本数很少,导致 g m − g_m^- gm g m g_m gm会相差很大。那么,通常设置 K = N 5 K = \frac{N}{5} K=5N

关于划分验证集大小的问题,还有以下两种解决办法,都是用了交叉验证的思想(cross validation)。

  • 留一法交叉验证(Leave-One-Out Cross Validation)
    此法每次取验证集大小为1,K=1,即每一只用一组数据对 g m − g_m^- gm进行验证。根据前面的分析,这样做的优点就是, g m − ≈ g m g_m^ - \approx {g_m} gmgm,但 E v a l 和 E o u t E_{val}和E_{out} EvalEout可能差别很大。为了避免这种 E v a l 和 E o u t E_{val}和E_{out} EvalEout相差很大,我们每次从D中取一组数据作为 D v a l D_{val} Dval,知道所有样本都被取出作为验证集过,共计算N次,最后对 D v a l D_{val} Dval求平均,得到 E l o o c v ( H , A ) {E_{loocv}}(H,A) Eloocv(H,A),用 E l o o c v ( H , A ) {E_{loocv}}(H,A) Eloocv(H,A)代替 E v a l E_{val} Eval最为选取模型m的标准。
    m ∗ = arg ⁡ min ⁡ 1 ≤ m ≤ M ( E m = E l o o c v ( H m , A m ) ) {m^*} = \mathop {\arg \min }\limits_{1 \le m \le M} ({E_m} = {E_{loocv}}({H_m},{A_m})) m=1mMargmin(Em=Eloocv(Hm,Am))
    这里的 E l o o c v ( H , A ) {E_{loocv}}(H,A) Eloocv(H,A)的表达式为,
    E l o o c v ( H , A ) = 1 N ∑ n = 1 N e n = 1 N ∑ n = 1 N e r r ( g n − ( x n ) , y n ) {E_{loocv}}(H,A) = \frac{1}{N}\sum\limits_{n = 1}^N {{e_n}} = \frac{1}{N}\sum\limits_{n = 1}^N {err(g_n^ - ({x_n}),{y_n})} Eloocv(H,A)=N1n=1Nen=N1n=1Nerr(gn(xn),yn)
    下面分析留一法的可行性,即用 E l o o c v ( H , A ) {E_{loocv}}(H,A) Eloocv(H,A)代替 E v a l E_{val} Eval,就可以使得 E l o o c v ( H , A ) ≈ E o u t {E_{loocv}}(H,A)\approx E_{out} Eloocv(H,A)Eout。具体的推导思路如下,
    ε D E l o o c v ( H , A ) = ε D 1 N ∑ n = 1 N e n = 1 N ∑ n = 1 N ε D e n                                                                                      = 1 N ∑ n = 1 N ε D n ε ( x n , y n ) e r r ( g n − ( x n ) , y n ) ⎵ = E o u t ( g n − )                                                                                      =    1 N ∑ n = 1 N ε D n E o u t ( g n − )                                                                                      =    1 N ∑ n = 1 N E ˉ o u t ( N − 1 ) = E ˉ o u t ( N − 1 ) \begin{array}{l} \mathop \varepsilon \limits_D {E_{loocv}}(H,A) = \mathop \varepsilon \limits_D \frac{1}{N}\sum\limits_{n = 1}^N {{e_n}} = \frac{1}{N}\sum\limits_{n = 1}^N {\mathop \varepsilon \limits_D {e_n}} \\\\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} = \frac{1}{N}\sum\limits_{n = 1}^N {\mathop \varepsilon \limits_{{D_n}} \underbrace {\mathop \varepsilon \limits_{({x_n},{y_n})} err(g_n^ - ({x_n}),{y_n})}_{ = {E_{out}}(g_n^ - )}} \\\\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} = \;\frac{1}{N}\sum\limits_{n = 1}^N {\mathop \varepsilon \limits_{{D_n}} } {E_{out}}(g_n^ - )\\\\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} = \;\frac{1}{N}\sum\limits_{n = 1}^N {{{\bar E}_{out}}(N - 1) = } {{\bar E}_{out}}(N - 1) \end{array} DεEloocv(H,A)=DεN1n=1Nen=N1n=1NDεen=N1n=1NDnε=Eout(gn) (xn,yn)εerr(gn(xn),yn)=N1n=1NDnεEout(gn)=N1n=1NEˉout(N1)=Eˉout(N1)
    假设有不同的数据集D,它的期望分布记为 ε D \mathop \varepsilon_D εD,则其 E l o o c v ( H , A ) {E_{loocv}}(H,A) Eloocv(H,A)可以通过推导,等于 E o u t ( N − 1 ) E_{out}(N-1) Eout(N1)的平均值,由于N-1近似于N,所以 E o u t ( N − 1 ) E_{out}(N-1) Eout(N1)的均值也就近似于 E o u t ( N ) E_{out}(N) Eout(N)均值,即, E l o o c v ( H , A ) ≈ E o u t {E_{loocv}}(H,A)\approx E_{out} Eloocv(H,A)Eout

  • V折交叉验证(V-Fold Cross Validation)
    上面已经描述了留一法的可行性,但其在实际应用中会面临两个问题。首先,是计算量的问题,如果有N个数据,那么就需要计算N次 E l o o c v E_{loocv} Eloocv,再计算平均值,当N非常大时,计算量非常大;第二个问题就是稳定性问题,因为预测本身存在不稳定因素,那么对所有的 E l o o c v E_{loocv} Eloocv取平均值可能会带来很大的数值跳动,稳定性不好。针对留一法的缺点,对其缺点进行改进,就得到了V折交叉验证法
    留一法是将N个数据分为N份,那么对应的改进措施就是将N个数据分为V份,计算过程与留一法相似,
    E c v ( H , A ) = 1 V ∑ v = 1 V E v a l ( V ) ( g v − ) {E_{cv}}(H,A) = \frac{1}{V}\sum\limits_{v = 1}^V {E_{val}^{(V)}(g_v^ - )} Ecv(H,A)=V1v=1VEval(V)(gv)
    这样做既可以减少计算量,又能得到最好的模型解,其实留一法就是V折交叉验证的一种特殊情况。

所以,一般用V折交叉验证法来选择最佳的模型。但是,因为Validation的数据来源也是样本集中的,所以并能保证最后的效果就一定好,但总体来说,只有样本数越多,越广泛,则Validation的结果就越可信,所选择的模型泛化能力也越强。



Aggregation

Validation是一种选择模型的方法,注意是选择,Selecting,它并不能把各个模型的优势结合起来,而这里的Blending和Bagging都是模型融合(aggregation)的方法。Aggregation的思想简单来说就是博采众长,将各个模型的长处结合起来,使最终的预测性能提高。

下面说明一下为什么Aggregation可以提高预测效果。
在这里插入图片描述
上图所示,平面上面分布着一些待分类的数据点,而图中有3条灰色的水平或垂直的直线,这些就是不同的模型求解出来的,即, g m g_m gm。那么,如果我们采用validation的方法,就会发现,无论选这3条中的哪一条,都会出现误分类的点,其效果并不好;所以,如果综合这3条水平或垂直的直线,组成如上图所示的黑色的折线,这样预测效果很明显有了提高。

从这个角度来看,通过aggregation得到的预测模型其边界更加的复杂,起到了特征转换(feature transform)的作用
在这里插入图片描述
上图中,同样是平面上分布着一些待分类的数据点,使用PLA算法,可以得到图中许多灰色的分类线。那么,通过aggregation,比如接下来要说的blending方法,就可以得到图中的黑色分类线。这条黑色线其实与SVM得到的直线比较接近,它代表了距离所有点都比较远的那条直线,是一种中庸的、适合的分类线。
从这个角度看,aggregation起到了正则化的效果,它让最终的预测模型更加具有代表性。

对于单一的模型而言,一般feature transform和regularization是矛盾的。即,通过feature transform之后的分类面往往更加复杂,会过拟合,即开头说过的方差(variance)较大;而通过regularization之后,会使得分类面趋向简单,而简单的分类面往往会造成许多的点没有正确分类,即开头所说的偏差(bias)较大。但是,在这里,通过不同的模型的融合(aggregation),就有可能同时兼顾feature transform和regularization这两种属性,从而得到不错的预测模型。



Blending

假设有T个不同的模型得到T个不同的 g t g_t gt,blending就是将他们进行整合以及合并,来得到最佳模型的过程。

Blending是一种基于投票(Voting)的思想。对于每个 g t g_t gt给予相同的权重,就叫uniform blending,类似于给每个 g t g_t gt一票;对于每个 g t g_t gt给予不同的权重,就叫non-uniform blending,类似于给不同的 g t g_t gt投的票数不同。而在non-uniform blending里,若投的票数为定值,则为linear blending;若投的票数为变量(用一个函数表示),则为any belnding,又叫做Stacking。

Uniform Blending
在blending过程中,对每个 g t g_t gt赋予相同的权重1就是uniform blending。

  • 用在分类(calssification) 问题中,最终的预测模型 G ( x ) G(x) G(x)的表达式为,
    • 二分类
      G ( x ) = s i g n ( ∑ t = 1 T 1 ⋅ g t ( x ) ) G(x) = sign(\sum\limits_{t = 1}^T {1 \cdot {g_t}(x)} ) G(x)=sign(t=1T1gt(x))
    • 多分类
      G ( x ) = arg ⁡ min ⁡ 1 ≤ k ≤ K ∑ t = 1 T [ [ g t ( x ) = k ] ] G(x) = \mathop {\arg \min }\limits_{1 \le k \le K} \sum\limits_{t = 1}^T {\left[\kern-0.15em\left[ {{g_t}(x) = k} \right]\kern-0.15em\right]} G(x)=1kKargmint=1T[[gt(x)=k]]

下面分析一下Uniform Blending用在分类问题中的可行性。分三种情况讨论:第一种,每个 g t g_t gt的表现都一样,这跟选其中任意一个 g t g_t gt的效果都相同;第二种,每个 g t g_t gt都有一些差别,此时,通过blending的方式可以使多数的意见修正少数的意见,即,少数服从多数,从而获得较好的结果;第三种,在多分类问题中,选择票数多的那一类为最终的预测结果。

  • 用在回归(regression) 问题中,最终的预测模型 G ( x ) G(x) G(x)就是对所有的 g t g_t gt求平均值,
    G ( x ) = 1 T ∑ t = 1 T g t ( x ) G(x) = \frac{1}{T}\sum\limits_{t = 1}^T {{g_t}(x)} G(x)=T1t=1Tgt(x)
    下面分析一下Uniform Blending用在回归问题中的可行性。计算 g t g_t gt的平均值可能比计算单一的 g t g_t gt更加稳定,更准确。原因可以根据开头提到的bias-variance 理论来解释
    E ( f ; D ) ⎵ E o u t ( g t ) = E D [ ( f ( x ; D ) − f − ( x ) ) 2 ] ⎵ v a r i a n c e + E D [ ( f − ( x ) − y ) 2 ] ⎵ E o u t ( G ) + E D [ ( y − y D ) 2 ] ⎵ n o i s e \underbrace {E(f;D)}_{{E_{out}}({g_t})} = \underbrace {{E_D}[{{(f(x;D) - \mathop f\limits^ - (x))}^2}]}_{{\rm{variance}}} + \underbrace {{E_D}[{{(\mathop f\limits^ - (x) - y)}^2}]}_{{E_{out}}(G)} + \underbrace {{E_D}[{{(y - {y_D})}^2}]}_{noise} Eout(gt) E(f;D)=variance ED[(f(x;D)f(x))2]+Eout(G) ED[(f(x)y)2]+noise ED[(yyD)2]
    上式中,左边的一项表示的是单个模型的期望泛化误差,记为 E o u t ( g t ) E_{out}(g_t) Eout(gt)。右边第一项表示的是方差,含义是不同的 g t g_t gt之间的差距是多少。右边第二项表示的是平均化后的G的泛化误差,记为 E o u t ( G ) E_{out}(G) Eout(G)。右边第三项为数据噪声,不考虑。
    在准确度的角度来说, E o u t ( g t ) ≥ E o u t ( G ) {E_{out}}({g_t}) \ge {E_{out}}(G) Eout(gt)Eout(G),G的泛化误差小;从稳定性的角度来说,通过平均化求得的G,使得右边第一项方差的值变小,从而获得更加稳定的表现。

Linear Blending

当给予每个 g t g_t gt的权重 α t {\alpha _t} αt不同时,其中 α t ≥ 0 {\alpha _t} \ge 0 αt0,最终的预测结果是所有 g t g_t gt的线性组合。
G ( x ) = s i g n ( ∑ t = 1 T α t ⋅ g t ( x ) )      w i t h      α t ≥ 0 G(x) = sign(\sum\limits_{t = 1}^T {{\alpha _t} \cdot {g_t}(x)} )\;\;with\;\;{\alpha _t} \ge 0 G(x)=sign(t=1Tαtgt(x))withαt0
怎么求解 α t {\alpha _t} αt的值,方法类似于线性回归,通过最小化Square Error,即 min ⁡ α t ≥ 0 E i n ( α ) \mathop {\min }\limits_{{\alpha _t} \ge 0} {E_{in}}(\alpha ) αt0minEin(α),式子如下,
min ⁡ α t ≥ 0 1 N ∑ n = 1 N ( y n − ∑ t = 1 T α t g t ( x n ) ) 2 \mathop {\min }\limits_{{\alpha _t} \ge 0} \frac{1}{N}\sum\limits_{n = 1}^N {{{({y_n} - \sum\limits_{t = 1}^T {{\alpha _t}{g_t}({x_n})} )}^2}} αt0minN1n=1N(ynt=1Tαtgt(xn))2

如何求解上式?不知道如何求解的话,那么可以对比一下下面的式子,
min ⁡ w i 1 N ∑ n = 1 N ( y n − ∑ i = 1 d ~ w i ϕ i ( x n ) ) 2 \mathop {\min }\limits_{{w_i}} \frac{1}{N}\sum\limits_{n = 1}^N {{{({y_n} - \sum\limits_{i = 1}^{\tilde d} {{w_i}{\phi _i}({x_n})} )}^2}} wiminN1n=1N(yni=1d~wiϕi(xn))2
这个式子,很熟悉,即,线性回归+特征转换。对比两两个式子,可以发现blending中的 g t g_t gt可以看作是特征转换,而blending中带求解的参数 α t {\alpha _t} αt也就是线性回归中带求解的参数 w i w_i wi,区别是blending中的参数有限制, α t ≥ 0 {{\alpha _t} \ge 0} αt0,总结起来,可以把其中的关系表示为,
l i n e a r      b l e n d i n g = L i n M o d e l      +      h y p o t h e s e s ( f e c t u r e      t r a n s f o r m )      +      c o n s t r a i n t s linear \;\;blending=LinModel\;\;+\;\;hypotheses(fecture\;\;transform)\;\;+\;\;constraints linearblending=LinModel+hypotheses(fecturetransform)+constraints
那么,这里的限制其实是可以去掉的,因为 α t &lt; 0 {\alpha _t} &lt; 0 αt<0 并不会影响分类的效果,只需要将该点的正类看作负类,负类看作正类即可。例如,在分类问题中,如果某个数据点的正类对应的 α t &lt; 0 {\alpha _t} &lt; 0 αt<0,则它表示该点是负类。我们所说的该样本是正类的概率是-99%,其实就表示该样本是负类的概率是99%。所以, α t ≥ 0 {{\alpha _t} \ge 0} αt0 α t &lt; 0 {\alpha _t} &lt; 0 αt<0的效果是等同的,可以把 α t ≥ 0 {{\alpha _t} \ge 0} αt0这个条件舍去,那么此时求解linear blending就可以用普通的线性回归的解法求解。

在求解的过程中,我们把数据集D分为两个部分,训练集 D t r a i n D_{train} Dtrain和验证集 D v a l D_{val} Dval。那么,通常的做法就是在训练集 D t r a i n D_{train} Dtrain上对各个模型进行训练,得到 g 1 − , g 2 − , ⋯ &ThinSpace; , g T − g_1^ - ,g_2^ - , \cdots ,g_T^ - g1,g2,,gT,然后通过 g − g^- g把验证集 D v a l D_{val} Dval上的数据 ( x n , y n ) (x_n,y_n) (xn,yn)转换成 ( z n = ϕ − ( x n ) , y n ) ({z_n} = {\phi ^ - }({x_n}),{y_n}) (zn=ϕ(xn),yn),通过在线性模型上最小化 E v a l E_{val} Eval得到 α t {\alpha _t} αt。最终再用所有的样本数据,用 g t g_t gt代替 g t − g_t^- gt(Validation中的思想),得到 G ( x ) G(x) G(x)的表达式, G ( x ) G(x) G(x) g t g_t gt的线性组合而不是 g t − g_t^- gt,系数是 α t {\alpha _t} αt

Any Blending(Stacking)

在linear blending中, G ( x ) G(x) G(x) g g g的线性组合;那么,在Stacking中, G ( x ) G(x) G(x)可以是 g g g的任何函数形式,即是一种非线性关系,其优点是模型复杂度高,更容易获取好的预测模型,但会带来过拟合的危险,通常采用正则化的方法,使模型具有更好的泛化能力。



Bagging

Blending是通过综合考虑各个 g t g_t gt来使得最终的预测效果提高。前面已经说过,获取 g t g_t gt的四种不同的方法,即,可以选择不同的模型H;可以设置不同的参数,如学习率,迭代次数等;可以由算法的随机性得到,如PLA等;可以用不同的训练集来训练。

那么,这里索要说明的就是最后一点,怎么利用一份已有的数据集来构造新的数据集?首先,我们来看下面的式子,
g ˉ = lim ⁡ T → ∞ G = lim ⁡ T → ∞ 1 T ∑ t = 1 T g t = ε D A ( D ) \bar g = \mathop {\lim }\limits_{T \to \infty } G = \mathop {\lim }\limits_{T \to \infty } \frac{1}{T}\sum\limits_{t = 1}^T {{g_t}} = \mathop \varepsilon \limits_D A(D) gˉ=TlimG=TlimT1t=1Tgt=DεA(D)
为了得到算法的平均的表现 g ˉ \bar g gˉ,这里做了两个近似:

  • 有限的且非常大的T;
  • 用已有的数据集D构造出 D t D_t Dt D t D_t Dt D D D独立同分布。

第一个条件没有问题,第二个条件的做法就是boostrapping,它是统计学里的一个概念,思想就是从一份已知的样本集D中模拟出类似的数据集 D t D_t Dt

boostrapping的做法,简单来说,就是有放回的抽样。假设有N笔资料,先从中选出一个样本,再放回去,再选择一个样本,再放回去,就这样重复N次,就可以得到一个新的N笔资料,这个新的样本集 D t D_t Dt可能包含原数据集 D D D中重复的样本点,也可能没有D里的某些样本,得到的 D t D_t Dt与D相似但又不完全相同。当然,抽取-放回的操作不一定非要是N,即模拟出的 D t D_t Dt的大小根据实际情况设定。而利用boostrap进行aggregation的操作就被称为bagging。

下面,看一个Bagging Pocket算法的例子。如下图,先用boostrapping得到25个不同的样本集,再用pocket算法得到25个不同的 g t g_t gt,每个pocket算法迭代1000次,最后,用blending把各个 g t g_t gt融合,得到图中的黑色分类线。
在这里插入图片描述
可以看出,通过boostrapping得到的样本集训练后,会得到差别很大的分类线(图中的灰线),但经过blending后,得到的分类线(图中黑色线)的效果还是不错的。值得注意的是,当各个基础的演算法对数据随机性很敏感的时候,bagging往往能有比较好的表现。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值