【机器学习自学笔记5】AdaBoost

AdaBoost 是一种典型的集成学习算法,通过对多个弱学习器的集合,构成一个强学习器。

弱学习器
弱学习器
...
弱学习器
强学习器

Boosting,也称为增强学习或提升法,是一种重要的集成学习技术,能够将预测精度仅比随机猜度略高的弱学习器增强为预测精度高的强学习器。

AdaBoost

G ( x ) = s i g n [ f ( x ) ] = s i g n [ α 1 G 1 ( x ) + α 2 G 2 ( x ) + . . . + α n G n ( x ) ] G(x) = sign[f(x)] = sign[\alpha_1G_1(x)+\alpha_2G_2(x)+...+\alpha_nG_n(x)] G(x)=sign[f(x)]=sign[α1G1(x)+α2G2(x)+...+αnGn(x)]

  • G(x) 表示训练出的集成学习器 (强学习器)
  • G i ( x ) G_i(x) Gi(x) 表示每一个个体学习器 (弱学习器)

对于数据集

序号12345678910
x0123456789
y111-1-1-1111-1

如何找到一个拟合函数?这就可以使用 AdaBoost 求解。

AdaBoost 的思想:

  • 训练第 1 个个体学习器,找到最佳分界点
  • 计算分类误差,将其作为该学习器的权重
  • 增加数据集中分类误差的权重,使其更可能被训练正确
  • 对修改数据集权重后的数据集训练第 2 个个体学习器,如此往复
  • 将训练得到的所有学习器 * 学习器的权重得到结果

AdaBoost 的步骤:

  • 创建第 1 个个体学习器 G 1 ( x ) G_1(x) G1(x),该学习器拥有自己对于每一个 x i x_i xi 的权重 w i w_i wi
  • 计算各个分界线 x = n i x = n_i x=ni x < n i x < n_i x<ni 时 y = 1, x > n i x > n_i x>ni 时 y = -1,再计算, x < n i x < n_i x<ni 时 y = -1, x > n i x > n_i x>ni 时 y = 1,记录每次的误差 (对于该题来说)
  • 找到最优的分界线,分界标准:每个错误的样本 * 权重之和最小
  • 记录分类错误的比例得到该学习器的权重
  • 根据学习器的分类结果修改权重;对于分类错误的结果,对应权重增加;对于分类正确的结果,对应权重减少 (通过修改权重使得下一次学习时错误结果更加被重视,使其更可能被分对)
  • 创建第 2, 3,4 … 个个体学习器 G 2 ( x ) G_2(x) G2(x),同样按照上面的步骤训练
  • 对于训练得到的所有学习器,通过每个学习器 * 学习器的权重之和得到最后的拟合函数

需要解决的问题:

  • 如何更新数据集的权重
  • 如何计算学习器的权重
  • 训练多少次就停止

学习器的权重计算

对于学习器,显然其误差越小,准确度就越高,就应该拥有更大的权重。

于是给出学习器权重的计算公式:
α i = 1 2 log ⁡ 1 − e i e i \alpha_i = \frac{1}{2}\log\frac{1-e_i}{e_i} αi=21logei1ei
其中 e i e_i ei 表示第 i 个学习器的误差

数据集的权重更新

对于数据集的权重,由于误差 = 所有被分错的 x 对应的权重之和,显然数据集中某一个 x 的权重越大,为使误差减小,该 x 越不能被分错。

因为,x 的权重 w 代表其重要程度,越重要就越不能被分错。

那么如何更新 w 呢?计算公式如下
w m + 1 , i = w m , i Z m e − α m y i G m ( x i ) w_{m+1,i} = \frac{w_{m,i}}{Z_m}e^{-\alpha_my_iG_m(x_i)} wm+1,i=Zmwm,ieαmyiGm(xi)

其 中 Z m = ∑ i = 1 N w m , i e − α m y i G m ( x i ) 其中 Z_m = \sum_{i=1}^Nw_{m,i}e^{-\alpha_my_iG_m(x_i)} Zm=i=1Nwm,ieαmyiGm(xi)

  • w m , i w_{m,i} wm,i 代表第 m 次学习器对应训练集的第 i 个 x 的权重
  • α m \alpha_m αm 代表第 m 次学习器的权重
  • G m ( x i ) G_m(x_i) Gm(xi) 则是第 m 个学习器的拟合函数
  • Z m Z_m Zm 的存在是为了进行归一化,确保 ∑ w m , i = 1 \sum w_{m,i} = 1 wm,i=1

第一个学习器

对于数据集

序号12345678910
x0123456789
y111-1-1-1111-1

给予初始权重

w0.10.10.10.10.10.10.10.10.10.1
x0123456789
y111-1-1-1111-1

寻找最优分界点
v = 0.5 , 即 f ( x ) = { 1 , x < 0.5 − 1 , x ≥ 0.5 v=0.5,即f(x) = \left\{ \begin{aligned} 1 & ,x \lt 0.5 \\ -1 & ,x \ge 0.5 \\ \end{aligned} \right. v=0.5,f(x)={11,x<0.5,x0.5
此时 x = 1, 2, 6, 7, 8 被分错

计算误差
e 1 , v = 0.5 = w 1 + w 2 + w 6 + w 7 + w 8 = 0.5 e_{1,v=0.5} = w_1 + w_2 + w_6 + w_7 +w_8 = 0.5 e1,v=0.5=w1+w2+w6+w7+w8=0.5

v = 1.5 , 即 f ( x ) = { 1 , x < 1.5 − 1 , x ≥ 1.5 v=1.5,即f(x) = \left\{ \begin{aligned} 1 & ,x \lt 1.5 \\ -1 & ,x \ge 1.5 \\ \end{aligned} \right. v=1.5,f(x)={11,x<1.5,x1.5

此时 x = 2, 6, 7, 8 被分错

计算误差
e 1 , v = 1.5 = w 2 + w 6 + w 7 + w 8 = 0.4 e_{1,v=1.5} = w_2 + w_6 + w_7 +w_8 = 0.4 e1,v=1.5=w2+w6+w7+w8=0.4
综上,遍历所有分界点,最终找到最小的误差为
e 1 = e 1 , v = 2.5 = w 6 + w 7 + w 8 = 0.3 e_1 = e_{1,v=2.5} = w_6 + w_7 +w_8 = 0.3 e1=e1,v=2.5=w6+w7+w8=0.3
第一个学习器的拟合函数 G 1 G_1 G1
G 1 = { 1 , x ≤ 2.5 − 1 , x > 2.5 G_1 = \left\{ \begin{aligned} 1 & ,x \le 2.5 \\ -1 & ,x \gt 2.5 \end{aligned} \right. G1={11,x2.5,x>2.5
计算得到第一个学习器的权重 α 1 \alpha_1 α1
α 1 = 1 2 log ⁡ 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
计算得到训练集的更新权重
Z 1 = ∑ i = 1 10 w 1 , i e − 0.4236 y i G 1 ( x i ) Z_1 = \sum_{i=1}^{10}w_{1,i}e^{-0.4236y_iG_1(x_i)} Z1=i=110w1,ie0.4236yiG1(xi)

= 7 ⋅ 0.1 e − 0.4236 + 3 ⋅ 0.1 e 0.4236 = 0.917 = 7\cdot0.1e^{-0.4236}+3\cdot0.1e^{0.4236} = 0.917 =70.1e0.4236+30.1e0.4236=0.917

w 2 , 1 = w 1 , 1 Z 1 e − 0.4236 y 1 G 1 ( x 1 ) = 0.1 0.917 e − 0.4236 = 0.0714 w_{2,1} = \frac{w_{1,1}}{Z_1}e^{-0.4236y_1G_1(x_1)} = \frac{0.1}{0.917}e^{-0.4236} = 0.0714 w2,1=Z1w1,1e0.4236y1G1(x1)=0.9170.1e0.4236=0.0714

同理
w 2 , 2 = w 2 , 3 = w 2 , 4 = w 2 , 5 = w 2 , 6 = w 2 , 10 = w 2 , 1 = 0.0714 w_{2,2} = w_{2,3} = w_{2,4} = w_{2,5} = w_{2,6} = w_{2,10} = w_{2,1} = 0.0714 w2,2=w2,3=w2,4=w2,5=w2,6=w2,10=w2,1=0.0714

w 2 , 7 = w 2 , 8 = w 2 , 9 = 0.1667 w_{2,7} = w_{2,8} = w_{2,9} = 0.1667 w2,7=w2,8=w2,9=0.1667

更新后的数据集

w0.07140.07140.07140.07140.07140.07140.16670.16670.16670.0714
x0123456789
y111-1-1-1111-1

第二个学习器

寻找最优分界点并计算误差
e 2 = e 2 v = 8.5 = w 3 + w 4 + w 5 = 0.0714 + 0.0714 + 0.0714 = 0.2142 e_2 = e_{2_{v=8.5}} = w_3+w_4+w_5 = 0.0714+0.0714+0.0714 = 0.2142 e2=e2v=8.5=w3+w4+w5=0.0714+0.0714+0.0714=0.2142
拟合函数
G 2 = { 1 , x ≤ 8.5 − 1 , x > 8.5 G_2=\left\{ \begin{aligned} 1 & ,x \le 8.5 \\ -1 & ,x \gt 8.5 \end{aligned} \right. G2={11,x8.5,x>8.5
第二个学习器的权重
α 2 = 1 2 log ⁡ 1 − 0.2143 0.2143 = 0.6496 \alpha_2 = \frac{1}{2}\log\frac{1-0.2143}{0.2143} = 0.6496 α2=21log0.214310.2143=0.6496
更新后的数据集权重
Z 2 = ∑ i = 1 10 w 2 , i e − 0.6496 y i G 2 ( x i ) Z_2 = \sum_{i=1}^{10}w_{2,i}e^{-0.6496y_iG_2(x_i)} Z2=i=110w2,ie0.6496yiG2(xi)

= 0.0714 e − 0.6496 + 0.0714 e − 0.6496 + 0.0714 e − 0.6496 + 0.0714 e 0.6496 + 0.0714 e 0.6496 = 0.0714e^{-0.6496}+0.0714e^{-0.6496}+0.0714e^{-0.6496}+0.0714e^{0.6496}+0.0714e^{0.6496} =0.0714e0.6496+0.0714e0.6496+0.0714e0.6496+0.0714e0.6496+0.0714e0.6496

+ 0.0714 e 0.6496 + 0.1667 e − 0.6496 + 0.1667 e − 0.6496 + 0.1667 e − 0.6496 + 0.0714 e − 0.6496 +0.0714e^{0.6496}+0.1667e^{-0.6496}+0.1667e^{-0.6496}+0.1667e^{-0.6496}+0.0714e^{-0.6496} +0.0714e0.6496+0.1667e0.6496+0.1667e0.6496+0.1667e0.6496+0.0714e0.6496

= 0.8205 =0.8205 =0.8205

w 3 , 1 = w 2 , 1 Z 2 e − 0.6496 = 0.0455 w_{3,1} = \frac{w_{2,1}}{Z_2}e^{-0.6496} = 0.0455 w3,1=Z2w2,1e0.6496=0.0455

同理更新所有权重

w0.04550.04550.04550.16670.16670.16670.10600.10600.10600.0455
x0123456789
y111-1-1-1111-1

第三个学习器

同样按照上面的步骤计算
G 3 = { − 1 , x ≤ 5.5 1 , x > 5.5 G_3=\left\{ \begin{aligned} -1 & ,x \le 5.5 \\ 1 & ,x \gt 5.5 \end{aligned} \right. G3={11,x5.5,x>5.5

w0.1250.1250.1250.1020.1020.1020.0650.0650.0650.125
x0123456789
y111-1-1-1111-1

生成拟合函数

经过 3 次训练后,得到每个弱学习器的拟合函数
G 1 = { 1 , x ≤ 2.5 − 1 , x > 2.5 G_1 = \left\{ \begin{aligned} 1 & ,x \le 2.5 \\ -1 & ,x \gt 2.5 \end{aligned} \right. G1={11,x2.5,x>2.5

G 2 = { 1 , x ≤ 8.5 − 1 , x > 8.5 G_2=\left\{ \begin{aligned} 1 & ,x \le 8.5 \\ -1 & ,x \gt 8.5 \end{aligned} \right. G2={11,x8.5,x>8.5

G 3 = { − 1 , x ≤ 5.5 1 , x > 5.5 G_3=\left\{ \begin{aligned} -1 & ,x \le 5.5 \\ 1 & ,x \gt 5.5 \end{aligned} \right. G3={11,x5.5,x>5.5

合成强学习器的拟合函数
f 3 ( x ) = α 1 G 1 ( x ) + α 2 G 2 ( x ) + α 3 G 3 ( x ) f_3(x) = \alpha_1G_1(x)+\alpha_2G_2(x)+\alpha_3G_3(x) f3(x)=α1G1(x)+α2G2(x)+α3G3(x)

= { 0.3218 , x ≤ 2.5 − 0.5214 , 2.5 < x ≤ 5.5 0.9774 , 5.5 < x ≤ 8.5 − 0.3218 , 8.5 ≤ x =\left\{ \begin{aligned} 0.3218 & ,x \le 2.5 \\ -0.5214 & ,2.5 \lt x \le 5.5 \\ 0.9774 & ,5.5 \lt x \le 8.5 \\ -0.3218 & ,8.5 \le x \\ \end{aligned} \right. =0.32180.52140.97740.3218,x2.5,2.5<x5.5,5.5<x8.5,8.5x

归一化处理后
f 3 ( x ) = α 1 G 1 ( x ) + α 2 G 2 ( x ) + α 3 G 3 ( x ) f_3(x) = \alpha_1G_1(x)+\alpha_2G_2(x)+\alpha_3G_3(x) f3(x)=α1G1(x)+α2G2(x)+α3G3(x)

= { 1 , x ≤ 2.5 − 1 , 2.5 < x ≤ 5.5 1 , 5.5 < x ≤ 8.5 − 1 , 8.5 ≤ x =\left\{ \begin{aligned} 1 & ,x \le 2.5 \\ -1 & ,2.5 \lt x \le 5.5 \\ 1 & ,5.5 \lt x \le 8.5 \\ -1 & ,8.5 \le x \\ \end{aligned} \right. =1111,x2.5,2.5<x5.5,5.5<x8.5,8.5x

对比数据集,所有数据都被分类正确!

什么时候停止训练

第一种方案:设定训练次数,训练次数到达后就停止

第二种方案:训练无法再提高准确率时就停止

接下来介绍一下方案二。

根据上面的学习器,如果只训练一次:
f 1 ( x ) = α 1 G 1 ( x ) f_1(x) = \alpha_1G_1(x) f1(x)=α1G1(x)

= { 0.4236 , x ≤ 2.5 − 0.4236 , x > 2.5 =\left\{ \begin{aligned} 0.4236 & ,x \le 2.5 \\ -0.4236 & ,x \gt 2.5 \\ \end{aligned} \right. ={0.42360.4236,x2.5,x>2.5

归一化后
f 1 ( x ) = { 1 , x ≤ 2.5 − 1 , x > 2.5 f_1(x)=\left\{ \begin{aligned} 1 & ,x \le 2.5 \\ -1 & ,x \gt 2.5 \\ \end{aligned} \right. f1(x)={11,x2.5,x>2.5

此时有 3 个点被分错。

如果训练两次:
f 2 ( x ) = α 1 G 1 ( x ) + α 2 G 2 ( x ) f_2(x) = \alpha_1G_1(x)+\alpha_2G_2(x) f2(x)=α1G1(x)+α2G2(x)

= { 1.0732 , x ≤ 2.5 0.226 , 2.5 < x ≤ 8.5 − 0.6496 , 8.5 < x =\left\{ \begin{aligned} 1.0732 & ,x \le 2.5 \\ 0.226 & ,2.5 \lt x \le 8.5 \\ -0.6496 & ,8.5 \lt x \\ \end{aligned} \right. =1.07320.2260.6496,x2.5,2.5<x8.5,8.5<x

归一化后
f 3 ( x ) = { 1 , x ≤ 8.5 − 1 , 8.5 < x f_3(x)=\left\{ \begin{aligned} 1 &, x \le 8.5 \\ -1 & ,8.5 \lt x \\ \end{aligned} \right. f3(x)={11,x8.5,8.5<x
此时仍有 3 个点被分错。

而第 3 次训练后
f 3 ( x ) = α 1 G 1 ( x ) + α 2 G 2 ( x ) + α 3 G 3 ( x ) f_3(x) = \alpha_1G_1(x)+\alpha_2G_2(x)+\alpha_3G_3(x) f3(x)=α1G1(x)+α2G2(x)+α3G3(x)

= { 1 , x ≤ 2.5 − 1 , 2.5 < x ≤ 5.5 1 , 5.5 < x ≤ 8.5 − 1 , 8.5 ≤ x =\left\{ \begin{aligned} 1 & ,x \le 2.5 \\ -1 & ,2.5 \lt x \le 5.5 \\ 1 & ,5.5 \lt x \le 8.5 \\ -1 & ,8.5 \le x \\ \end{aligned} \right. =1111,x2.5,2.5<x5.5,5.5<x8.5,8.5x

没有点被分错,故此时就可以停止训练。

若多次训练后准确率没有得到有效提升,训练同样应该停止。

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页