【机器学习】一文理解集成学习Boosting思想之AdaBoost,附带案例

一、Boosting(提升学习)

随机森林

在随机森林的构建过程中,由于各棵树之间是没有关系的,相对独立的;在构建的过程中,构建第m个子树的时候,不会考虑前面的m-1棵子树。

那么:

  • 如果在构建第m棵子树的时候,考虑到前m-1棵子树的结果,会不会对最终结果产生有益
    的影响?
  • 各个决策树组成随机森林后,在形成最终结果的时候能不能给定一种既定的决策顺序呢?
    (也就是哪颗子树先进行决策、哪颗子树后进行决策)

对于 Bagging 思想集成的随机森林,是可以并行训练的,正是因为每个弱分类器之间不相互影响;而 Boosting 是通过串行训练而获得的,每个分类器要根据以前训练出的分类器的性能来进行训练。

【机器学习】一文理解集成学习Boosting思想之AdaBoost,附带案例_第1张图片

  • Boosting 分类的结果是基于所有弱分类器的加权求和结果的,所以 Boosting 中的每个弱分类器的权重不一样,每个权重代表的是其对应的弱分类器在上一轮迭代中的成功度;
  • Bagging 中的弱分类器的权重是一样的。

Boosting 常用模型:

  • AdaBoost
  • Gradient Boosting(GBT/GBDT/GBRT)
  • XGBoost

二、AdaBoost

1、AdaBoost 执行过程

AdaBoost 是一种迭代算法,整个迭代过程直到错误率足够小或者达到一定的迭代次数为止;每轮迭代中会在修改后的训练集上产生一个新的弱学习器,然后使用该弱学习器对所有样本进行预测,以评估每个样本的重要性。

  1. 在每一轮如何改变训练数据的权重或概率分布

AdaBoost算法会为每个样本赋予一个权重,其做法是:

  • 提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。

这样一来,在那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注,也就是说 越难区分 的样本在训练过程中会变得越重要。于是,分类问题被一系列的弱分类器“分而治之”。

  1. 如何将弱分类器组合成一个强分类器

AdaBoost 采取加权多数表决的方法:

  • 具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
  1. 样本加权、弱学习器组合

【机器学习】一文理解集成学习Boosting思想之AdaBoost,附带案例_第2张图片

  • 如图1,训练一个弱分类器,由中间虚线决策;
  • 如图2,将分类错误的样本加权,图中由大小区分,再训练一个弱分类器,由左侧虚线决策;
  • 如图3,再将分类错误的样本权重加大,再训练弱分类器;
  • 如图4,将之前学习的弱学习器决策线组合,形成最终的分类器

2、AdaBoost 算法推导

Adaboost算法将基分类器的线性组合作为强分类器,同时给分类误差率较小的基本分类器以大的权重值,给分类误差率较大的基分类器以小的权重值

重点(仔细推导):
(1)构建的线性组合为:
f ( x ) = ∑ m = 1 M α m G m ( x ) f(x) = \sum_{m=1}^M\alpha_mG_m(x) f(x)=m=1MαmGm(x)
(2)最强学习器是在线性组合的基础上进行Sign函数转换:
G ( x ) = s i g n ( f ( x ) ) = s i g n [ ∑ m = 1 M α m G m ( x ) ] G(x) = sign(f(x)) = sign\Big[\sum_{m=1}^M\alpha_mG_m(x)\Big] G(x)=sign(f(x))=sign[m=1MαmGm(x)]
(3)损失函数:
l o s s = 1 n ∑ i = 1 n I ( G ( x i ) = ̸ y i ) ⩽ 1 n ∑ i = 1 n e − y i f ( x i ) loss=\frac{1}{n}\sum_{i=1}^nI(G(x_i) =\not y_i) \leqslant \frac{1}{n}\sum_{i=1}^n e^{-y_if(x_i)} loss=n1i=1nI(G(xi)≠yi)n1i=1neyif(xi)

  • 其中, I ( G ( x i ) = ̸ y i ) I(G(x_i) =\not y_i) I(G(xi)≠yi) 为指示函数,表示预测值与真实值不等则函数为1,否则为0;所以不等式前面一部分表示准确率。
  • 不等式后半部分:假设预测正确结果为1,预测错误结果为0, f ( x ) f(x) f(x) 为预测值, y i y_i yi 为真实值;
  • 当预测结果与真实值相等,即 y i = f ( x i ) = 1 , y i f ( x i ) = 1 , e − y i f ( x i ) = e − 1 < 1 y_i = f(x_i)=1,y_if(x_i) = 1,e^{-y_if(x_i)} = e^{-1}< 1 yi=f(xi)=1yif(xi)=1eyif(xi)=e1<1
  • 当预测结果与真实值不等,即 y i f ( x i ) = − 1 , e − y i f ( x i ) = e > 1 y_if(x_i) = -1,e^{-y_if(x_i)} = e > 1 yif(xi)=1eyif(xi)=e>1
  • 故不等式恒成立。

(4)假设第k-1轮的强学习器为:
f k − 1 ( x ) = ∑ j = 1 k − 1 α j G j ( x ) f_{k-1}(x)=\sum_{j=1}^{k-1}\alpha_jG_j(x) fk1(x)=j=1k1αjGj(x)
(5)第k轮的强学习器为:
f k ( x ) = f k − 1 ( x ) + α k G k ( x ) f_k(x) = f_{k-1}(x) + \alpha_kG_k(x) fk(x)=fk1(x)+αkGk(x)
(6)损失函数为:
l o s s = 1 n ∑ i = 1 n e − y i ( f k − 1 ( x i ) + α k G k ( x i ) ) loss = \frac{1}{n}\sum_{i=1}^ne^{-y_i( f_{k-1}(x_i) + \alpha_kG_k(x_i))} loss=n1i=1neyi(fk1(xi)+αkGk(xi))
= 1 n ∑ i = 1 n e − y i f k − 1 ( x i ) e − y i α k G k ( x i ) = \frac{1}{n}\sum_{i=1}^ne^{-y_i f_{k-1}(x_i)}e^{-y_i\alpha_kG_k(x_i)} =n1i=1neyifk1(xi)eyiαkGk(xi)
由于在训练第k轮的时候,前一轮损失是一个已知值,所以可令 w ‾ k i = e − y i f k − 1 ( x i ) \overline{w}_{ki} = e^{-y_i f_{k-1}(x_i)} wki=eyifk1(xi),第k轮的损失函数为:
l o s s = 1 n ∑ i = 1 n w ‾ k i e − y i α k G k ( x i ) loss= \frac{1}{n}\sum_{i=1}^n\overline{w}_{ki}e^{-y_i\alpha_kG_k(x_i)} loss=n1i=1nwkieyiαkGk(xi)
(7)是上面损失函数达到最小值的 α k , G k \alpha_k,G_k αkGk 就是AdaBoost算法的最终解

求解过程分为两步:

  1. G k ∗ ( x ) G^*_k(x) Gk(x)
  • 对于任意 α > 0 \alpha >0 α>0,使损失函数最小的 G k ∗ ( x ) G^*_k(x) Gk(x)可由下式得到:
  • G k ∗ ( x ) = a r g min ⁡ G ∑ i = 1 n w ‾ k i I ( y i = ̸ G ( x i ) ) G^*_k(x) = arg \min_G\sum_{i=1}^n\overline{w}_{ki} I(y_i =\not G(x_i)) Gk(x)=argGmini=1nwkiI(yi≠G(xi))
  • 其中: w ‾ k i = e − y i f k − 1 ( x i ) \overline{w}_{ki} = e^{-y_i f_{k-1}(x_i)} wki=eyifk1(xi);表示第 k k k轮第 i i i个实例的权重,且 ∑ i = 1 n w ‾ m i = 1 \sum_{i=1}^n \overline{w}_{mi}=1 i=1nwmi=1
  • 此分类器 G k ∗ ( x ) G^*_k(x) Gk(x)即为AdaBoost算法的基本分类器(弱分类器),它是使第k轮加权训练数据分类误差率最小的基本分类器。
  1. α k ∗ \alpha^*_k αk
  • ∑ i = 1 n w ‾ k i e − y i α k G k ( x i ) \sum_{i=1}^n\overline{w}_{ki}e^{-y_i\alpha_kG_k(x_i)} i=1nwkieyiαkGk(xi)
  • = ∑ y i = G k ( x i ) w ‾ k i e − α k + ∑ y i = ̸ G k ( x i ) w ‾ k i e α k =\sum_{y_i = G_k(x_i)}\overline{w}_{ki}e^{-\alpha_k}+\sum_{y_i =\not G_k(x_i)}\overline{w}_{ki}e^{\alpha_k} =yi=Gk(xi)wkieαk+yi≠Gk(xi)wkieαk
  • = ( e α k − e − α k ) ∑ i = 1 n w ‾ k i I ( y i = ̸ G ( x i ) ) + e − α k ∑ i = 1 n w ‾ k i =(e^{\alpha_k }-e^{-\alpha_k})\sum_{i=1}^n \overline{w}_{ki}I(y_i =\not G(x_i)) + e^{-\alpha_k}\sum_{i=1}^n \overline{w}_{ki} =(eαkeαk)i=1nwkiI(yi≠G(xi))+eαki=1nwki
  • 其中: ∑ i = 1 n w ‾ k i I ( y i = ̸ G ( x i ) ) = ∑ y i = ̸ G k ( x i ) w ‾ k i \sum_{i=1}^n \overline{w}_{ki}I(y_i =\not G(x_i))=\sum_{y_i =\not G_k(x_i)}\overline{w}_{ki} i=1nwkiI(yi≠G(xi))=yi≠Gk(xi)wki
  • ∑ i = 1 n w ‾ k i = ∑ y i = G k ( x i ) w ‾ k i + ∑ y i = ̸ G k ( x i ) w ‾ k i \sum_{i=1}^n \overline{w}_{ki}=\sum_{y_i = G_k(x_i)}\overline{w}_{ki}+\sum_{y_i =\not G_k(x_i)}\overline{w}_{ki} i=1nwki=yi=Gk(xi)wki+yi≠Gk(xi)wki
  • 然后对 α k \alpha_k αk求导并使导数为0:
  • ( e α k + e − α k ) ∑ i = 1 n w ‾ k i I ( y i = ̸ G ( x i ) ) − e − α k ∑ i = 1 n w ‾ k i = 0 (e^{\alpha_k}+e^{-\alpha_k})\sum_{i=1}^n \overline{w}_{ki}I(y_i =\not G(x_i)) - e^{-\alpha_k}\sum_{i=1}^n \overline{w}_{ki} = 0 (eαk+eαk)i=1nwkiI(yi≠G(xi))eαki=1nwki=0
  • ( e α k + e − α k ) ∑ i = 1 n w ‾ k i I ( y i = ̸ G ( x i ) ) = e − α k ∑ i = 1 n w ‾ k i (e^{\alpha_k}+e^{-\alpha_k})\sum_{i=1}^n \overline{w}_{ki}I(y_i =\not G(x_i))=e^{-\alpha_k}\sum_{i=1}^n \overline{w}_{ki} (eαk+eαk)i=1nwkiI(yi≠G(xi))=eαki=1nwki
  • e α k + e − α k e − α k = ∑ i = 1 n w ‾ k i ∑ i = 1 n w ‾ k i I ( y i = ̸ G ( x i ) ) \frac{e^{\alpha_k}+e^{-\alpha_k}}{e^{-\alpha_k}}=\frac{\sum_{i=1}^n \overline{w}_{ki}}{\sum_{i=1}^n \overline{w}_{ki}I(y_i =\not G(x_i))} eαkeαk+eαk=i=1nwkiI(yi≠G(xi))i=1nwki
  • e 2 α k + 1 = ∑ i = 1 n w ‾ k i ∑ i = 1 n w ‾ k i I ( y i = ̸ G ( x i ) ) e^{2\alpha_k} + 1 = \frac{\sum_{i=1}^n \overline{w}_{ki}}{\sum_{i=1}^n \overline{w}_{ki}I(y_i =\not G(x_i))} e2αk+1=i=1nwkiI(yi≠G(xi))i=1nwki
  • e 2 α k = ∑ i = 1 n w ‾ k i − ∑ i = 1 n w ‾ k i I ( y i = ̸ G ( x i ) ) ∑ i = 1 n w ‾ k i I ( y i = ̸ G ( x i ) ) e^{2\alpha_k} = \frac{\sum_{i=1}^n \overline{w}_{ki} - \sum_{i=1}^n \overline{w}_{ki}I(y_i =\not G(x_i))}{\sum_{i=1}^n \overline{w}_{ki}I(y_i =\not G(x_i))} e2αk=i=1nwkiI(yi≠G(xi))i=1nwkii=1nwkiI(yi≠G(xi))
  • α k = 1 2 l n ( ∑ i = 1 n w ‾ k i − ∑ i = 1 n w ‾ k i I ( y i = ̸ G ( x i ) ) ∑ i = 1 n w ‾ k i I ( y i = ̸ G ( x i ) ) ) \alpha_k = \frac{1}{2}ln\Big(\frac{\sum_{i=1}^n \overline{w}_{ki} - \sum_{i=1}^n \overline{w}_{ki}I(y_i =\not G(x_i))}{\sum_{i=1}^n \overline{w}_{ki}I(y_i =\not G(x_i))}\Big) αk=21ln(i=1nwkiI(yi≠G(xi))i=1nwkii=1nwkiI(yi≠G(xi)))
  • E k = ∑ i = 1 n w ‾ k i I ( y i = ̸ G ( x i ) ) \mathcal{E_k} = \sum_{i=1}^n \overline{w}_{ki}I(y_i =\not G(x_i)) Ek=i=1nwkiI(yi≠G(xi)),且 ∑ i = 1 n w ‾ m i = 1 \sum_{i=1}^n \overline{w}_{mi}=1 i=1nwmi=1
  • 故:
  • α k ∗ = 1 2 l n ( 1 − E k E k ) \alpha_k^* = \frac{1}{2}ln\Big(\frac{1 - \mathcal{E}_k}{\mathcal{E}_k}\Big) αk=21ln(Ek1Ek)

以上就是算法的推导过程,下面我们就用上面得到的解,来构建 AdaBoost 算法:

3、AdaBoost 算法的构建过程:

  • 1、假设训练数据集 T = { ( X 1 , Y 1 ) , ( X 2 , Y 2 ) , . . , ( X n , Y n ) } T = \{(X_1,Y_1),(X_2,Y_2),..,(X_n,Y_n)\} T={(X1,Y1),(X2,Y2),..,(Xn,Yn)}
  • 2、初始化训练数据权重分布:
    D 1 = ( w 11 , w 12 , . . . , w 1 n ) , w 1 i = 1 n , i = 1 , 2 , . . . , n D_1 = (w_{11},w_{12},...,w_{1n}),\quad w_{1i} = \frac{1}{n},\quad i=1,2,...,n D1=(w11,w12,...,w1n),w1i=n1,i=1,2,...,n
  • 3、使用具有权重分布 D m D_m Dm 的训练数据集学习,得到基本分类器
    G m ( x ) : x → { − 1 , + 1 } G_m(x):x \rightarrow\{-1, +1\} Gm(x)x{1,+1}
  • 4、计算 G m ( x ) G_m(x) Gm(x) 在训练集上的分类误差
    E m = P ( G m ( x ) = ̸ y i ) = ∑ i = 1 n w ( m i ) I ( G m ( x ) = ̸ y i ) \mathcal{E}_m = P(G_m(x) =\not y_i) = \sum_{i=1}^n w_{(mi)}I(G_m(x) =\not y_i) Em=P(Gm(x)≠yi)=i=1nw(mi)I(Gm(x)≠yi)

其中, w ( m i ) w_{(mi)} w(mi)为第m次迭代第i个样本的权重, I ( G m ( x ) = ̸ y i ) I(G_m(x) =\not y_i) I(Gm(x)≠yi)为指示函数,决策正确为0,决策错位为1;

  • 5、计算 G m ( x ) G_m(x) Gm(x) 模型的权重系数 α m \alpha_m αm
    α m = 1 2 l n ( 1 − E m E m ) \alpha_m = \frac{1}{2} ln(\frac{1 - \mathcal{E}_m}{\mathcal{E}_m}) αm=21ln(Em1Em)
  • 6、权重训练数据集的权重分布
    D m + 1 = ( w ( m + 1 , 1 ) , w ( m + 1 , 2 ) , . . . , w ( m + 1 , n ) ) D_{m+1} = (w_{(m+1,1)},w_{(m+1,2)},...,w_{(m+1,n)}) Dm+1=(w(m+1,1),w(m+1,2),...,w(m+1,n))
    w ( m + 1 , i ) = w ( m , i ) Z m e − y i α m G m ( x i ) w_{(m+1,i)} = \frac{w_{(m,i)}}{Z_m}e^{-y_i\alpha_mG_m(x_i)} w(m+1,i)=Zmw(m,i)eyiαmGm(xi)

其中: Z m = ∑ i = 1 n w ( m i ) e − y i α m G m ( x i ) Z_m = \sum_{i=1}^n w_{(mi)}e^{-y_i\alpha_mG_m(x_i)} Zm=i=1nw(mi)eyiαmGm(xi)

  • 7、构建基本分类器的线性组合
    f ( x ) = ∑ m = 1 M α m G m ( x ) f(x) = \sum_{m=1}^M \alpha_mG_m(x) f(x)=m=1MαmGm(x)
  • 8、得到最终分类器
    G ( x ) = s i g n ( f ( x ) ) = s i g n [ ∑ m = 1 M α m G m ( x ) ] G(x) = sign\big(f(x)\big) = sign \Big[\sum_{m=1}^M\alpha_m G_m(x)\Big] G(x)=sign(f(x))=sign[m=1MαmGm(x)]

【机器学习】一文理解集成学习Boosting思想之AdaBoost,附带案例_第3张图片

4、简单实例进一步理解 AdaBoost算法

通过具体数据了解 AdaBoost 算法

训练数据集如下表:

【机器学习】一文理解集成学习Boosting思想之AdaBoost,附带案例_第4张图片

(1)初始化数据权值分布
D 1 = ( w 11 , w 12 , . . . , w 110 ) w 1 i = 0.1 , i = 1 , 2 , . . . , 10 D_1 = (w_{11},w_{12},...,w_{110}) \\ w_{1i} = 0.1, i = 1,2,...,10 D1=(w11,w12,...,w110)w1i=0.1,i=1,2,...,10
(2) m = 1 m = 1 m=1:

  • (a)在权值分布为 D 1 D_1 D1的训练数据集上,阀值 v v v取2.5时分类误差率最低,故基本分类器为:
    G 1 ( x ) = { 1 , x < 2.5 − 1 , x > 2.5 G_1(x) = \begin{cases} 1, \quad x < 2.5 \\ \\ -1, \quad x>2.5 \end{cases} G1(x)=1,x<2.51,x>2.5

  • (b) G 1 ( x ) G_1(x) G1(x)在训练数据集上的误差率
    e 1 = P ( G 1 ( x ) = ̸ y i ) = 0.3 e_1 = P(G_1(x) =\not y_i) = 0.3 e1=P(G1(x)≠yi)=0.3

  • (c)计算 G 1 ( x ) G_1(x) G1(x)的系数:
    α 1 = 1 2 l o g 1 − e 1 e 1 = 0.4236 \alpha_1 = \frac{1}{2}log\frac{1- e_1}{e_1} = 0.4236 α1=21loge11e1=0.4236

  • (d)更新训练数据集的权值分布
    D 2 = ( w 21 , w 22 , . . . , w 210 ) w w i = w 1 i Z 1 e x p ( − α 1 y i G 1 ( x ) ) , i = 1 , 2 , . . . , 10 D 2 = ( 0.07143 , 0.07143 , 0.07143 , 0.07143 , 0.07143 , 0.07143 , 0.16667 , 0.16667 , 0.16667 , 0.07143 ) f 1 ( x ) = 0.4236 G 1 ( x ) D_2 = (w_{21},w_{22},...,w_{210}) \\ w_{wi} = \frac{w_{1i}}{Z_1}exp(-\alpha_1 y_iG_1(x)), i = 1, 2,...,10 \\ D_2 = (0.07143,0.07143,0.07143,0.07143,0.07143,0.07143,0.16667,0.16667,0.16667,0.07143) \\ f_1(x) = 0.4236G_1(x) D2=(w21,w22,...,w210)wwi=Z1w1iexp(α1yiG1(x)),i=1,2,...,10D2=(0.07143,0.07143,0.07143,0.07143,0.07143,0.07143,0.16667,0.16667,0.16667,0.07143)f1(x)=0.4236G1(x)
    分类器 s i n g [ f 1 ( x ) ] sing[f_1(x)] sing[f1(x)]在训练数据集上有3个误分类点。

m = 2 m = 2 m=2:

  • (a)在权值分布为 D 2 D_2 D2的训练数据集上,阀值 v v v取8.5时分类误差率最低,故基本分类器为:
    G 2 ( x ) = { 1 , x < 8.5 − 1 , x > 8.5 G_2(x) = \begin{cases} 1, \quad x < 8.5 \\ \\ -1, \quad x>8.5 \end{cases} G2(x)=1,x<8.51,x>8.5
    此时,序号为4,5,6的分类错误

  • (b) G 2 ( x ) G_2(x) G2(x)在训练数据集上的误差率(将序号为4,5,6对应的w相加):
    e 2 = 0.07143 + 0.07143 + 0.07143 = 0.2143 e_2 =0.07143 + 0.07143+0.07143 = 0.2143 e2=0.07143+0.07143+0.07143=0.2143

  • (c)计算 G 2 ( x ) G_2(x) G2(x)的系数: α 2 = 0.6496 \alpha_2 = 0.6496 α2=0.6496

  • (d)更新训练数据集的权值分布
    D 3 = ( 0.0455 , 0.0455 , 0.0455 , 0.1667 , 0.1667 , 0.1667 , 0.1667 , 0.1667 , 0.1667 , 0.0455 ) f 2 ( x ) = 0.4236 G 1 ( x ) + 0.6496 G 2 ( x ) D_3 = (0.0455,0.0455,0.0455,0.1667,0.1667,0.1667,\\ 0.1667,0.1667,0.1667,0.0455) \\ f_2(x) = 0.4236G_1(x) + 0.6496G_2(x) D3=(0.0455,0.0455,0.0455,0.1667,0.1667,0.1667,0.1667,0.1667,0.1667,0.0455)f2(x)=0.4236G1(x)+0.6496G2(x)
    分类器 s i n g [ f 2 ( x ) ] sing[f_2(x)] sing[f2(x)]在训练数据集上有3个误分类点。

m = 3 m = 3 m=3:

  • (a)在权值分布为 D 3 D_3 D3的训练数据集上,阀值 v v v取8.5时分类误差率最低,故基本分类器为:
    G 3 ( x ) = { 1 , x < 5.5 − 1 , x > 5.5 G_3(x) = \begin{cases} 1, \quad x < 5.5 \\ \\ -1, \quad x>5.5 \end{cases} G3(x)=1,x<5.51,x>5.5

  • (b) G 3 ( x ) G_3(x) G3(x)在训练数据集上的误差率: e 3 = 0.1820 e_3 = 0.1820 e3=0.1820

  • (c)计算 G 3 ( x ) G_3(x) G3(x)的系数: α 3 = 0.7514 \alpha_3 = 0.7514 α3=0.7514

  • (d)更新训练数据集的权值分布
    D 3 = ( 0.125 , 0.125 , 0.125 , 0.125 , 0.102 , 0.102 , 0.102 , 0.065 , 0.065 , 0.125 ) f 3 ( x ) = 0.4236 G 1 ( x ) + 0.6496 G 2 ( x ) + 0.7514 G 3 ( x ) D_3 = (0.125,0.125,0.125,0.125,0.102,0.102,\\ 0.102,0.065,0.065,0.125) \\ f_3(x) = 0.4236G_1(x) + 0.6496G_2(x)+0.7514G_3(x) D3=(0.125,0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,0.125)f3(x)=0.4236G1(x)+0.6496G2(x)+0.7514G3(x)

分类器 s i n g [ f 3 ( x ) ] sing[f_3(x)] sing[f3(x)]在训练数据集上有0个误分类点。

最终分类器为:
G ( x ) = s i g n [ f 3 ( x ) ] = s i g n [ 0.4236 G 1 ( x ) + 0.6496 G 2 ( x ) + 0.7514 G 3 ( x ) ] G(x) = sign[f_3(x)] = sign[0.4236G_1(x) + 0.6496G_2(x)+0.7514G_3(x)] G(x)=sign[f3(x)]=sign[0.4236G1(x)+0.6496G2(x)+0.7514G3(x)]

三、AdaBoost 案例

代码可见:Github

sklearn 库中 ensemble.AdaBoostClassifier 以及 ensemble.AdaBoostRegressor API:

分类:
sklearn.ensemble.AdaBoostClassifier(base_estimator=None, n_estimators=50, 
		learning_rate=1.0, algorithm=’SAMME.R’, random_state=None)
回归:		
sklearn.ensemble.AdaBoostRegressor(base_estimator=None, n_estimators=50,
		learning_rate=1.0, loss=’linear’, random_state=None)

常用参数比较:

参数 AdaBoostClassifier AdaBoostRegressor
base_estimator 弱分类器对象,默认为CART分类树,DecisionTreeClassifier; 弱回归器对象,默认为CART回归树,DecisionTreeRegressor;
algorithm SAMME和SAMME.R;SAMME表示构建过程中使用样本集分类效果作为弱分类器的权重;SAMME.R使用对样本集分类的预测概率大小作为弱分类器的权重。由于SAMME.R使用了连续的概率度量值,所以一般迭代比SAMME快,默认参数为SAMME.R;强调:使用SAMME.R必须要求base_estimator指定的弱分类器模型必须支持概率预测,即具有predict_proba方法。 不支持
loss 不支持 指定误差的计算方式,可选参数”linear”, “square”,“exponential”, 默认为”linear”;一般不用改动
n_estimators 最大迭代次数,值过小可能会导致欠拟合,值过大可能会导致过拟合,一般50~100比较适合,默认50
learning_rate 指定每个弱分类器的权重缩减系数v,默认为1;一般从一个比较小的值开始进行调参;该值越小表示需要更 多的弱分类器
  • 数据量大的时候,可以增加内部分类器的树深度,也可以不限制树深 max_depth,一般范围在10-100之间
  • 数据量小的时候,一般可以设置树深度较小,或者 n_estimators 较小迭代次数或者最大弱分类器数:200次

1、Adaboost 分类算法

本案例将 AdaBoosted 决策树桩拟合到由两个“高斯分位数” 聚类组成的非线性可分类分类数据集,并绘制决策边界和决策分数

【机器学习】一文理解集成学习Boosting思想之AdaBoost,附带案例_第5张图片

代码可见:05_Adaboost分类算法.py

2、Adaboost参数algorithm取值比较

本案例通过更改参数algorithm的取值比较"ASMME""SAMME.R" 的收敛速度,错误率

【机器学习】一文理解集成学习Boosting思想之AdaBoost,附带案例_第6张图片

可以看出,SAMME.R 的收敛速度明显比 SAMME 快,错误率也比 SAMME 低,所以一般推荐使用 SAMME.R

代码可见:06_Adaboost参数algorithm取值比较.py

总结

AdaBoost 的优点如下:

  • 可以处理连续值和离散值;
  • 模型的鲁棒性比较强;
  • 解释强,结构简单。

AdaBoost 的缺点如下:

  • 对异常样本敏感,异常样本可能会在迭代过程中获得较高的权重值,最终影响模型效果。

你可能感兴趣的:(机器学习,机器学习)