简明理解AdaBoost算法

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

简明理解AdaBoost算法

从案例理解AdaBoost

(转载自李航《统计学习方法》,有删减),使用AdaBoost算法学习如下训练数据,弱分类器采用sign()函数。

x 1 2 3 4 5 6 7 8 9
y 1 1 1 -1 -1 -1 1 1 1

解:
初始化数据权值分布,即 m = 0 m=0
D 1 = ( w 11 , w 12 , . . . , w 110 ) D_1=(w_{11},w_{12},...,w_{110}) w 1 i = 0.1 , i = 1 , 2 , . . . , 10 w_{1i}=0.1, \quad i=1,2,...,10
m = 1 m=1 :
(1) 基本分类器: G 1 ( x ) = s i g n ( x 2.5 ) G_1(x)=-sign(x-2.5)
(2) 误差率 e 1 = P ( G 1 ( x i ) y i ) = 0.3 e_1=P(G_1(x_i) \neq y_i)=0.3
(3) 计算 G 1 ( x ) G_1(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
(4) 更新权值分布:
D 2 ( w 21 , w 22 , . . . , w 210 ) D_2(w_{21},w_{22},...,w_{210}) w 2 i = w 1 i Z 1 e x p ( α 1 y i G 1 ( x i ) ) , i = 1 , 2 , . . . , 10 w_{2i}=\frac{w_{1i}}{Z_1}exp(-\alpha_1y_iG_1(x_i)), \quad i=1,2,...,10 f 1 ( x ) = 0.4236 G 1 ( x ) f_1(x)=0.4236G_1(x) 分类器 s i g n [ f 1 ( x ) ] sign[f_1(x)] 在训练数据集上有3个误分类点。
m = 2 , m = 3 m=2,m=3 分别执行以上步骤: G ( x ) = s i g n [ 0.4236 G 1 ( x ) + 0.6496 G 2 ( x ) + 0.7514 G 3 ( x ) ] G(x)=sign[0.4236G_1(x)+0.6496G_2(x)+0.7514G_3(x)]

import numpy as np 
import matplotlib.pyplot as plt

x0 = [0,1,2,3,4,5,6,7,8,9]
y0 = [1,1,1,-1,-1,-1,1,1,1,-1]

x1 = np.linspace(-1,10,100)
G1 = -np.sign(x1-2.5) 
G2 = -np.sign(x1-8.5) 
G3 = np.sign(x1-5.5)

fig, axs = plt.subplots(2,2)

axs[0,0].scatter(x0,y0)
axs[0,0].plot(x1,G1)
axs[0, 0].set_title('f1(x)', fontsize=10)

axs[0,1].scatter(x0,y0)
axs[0,1].plot(x1,np.sign(0.4236*G1+G2))
axs[0,1].set_title('f2(x)', fontsize=10)

axs[1,0].scatter(x0,y0)
axs[1,0].plot(x1,np.sign(0.4236*G1+0.6496*G2+G3))
axs[1,0].set_title('f3(x)', fontsize=10)

axs[1,1].scatter(x0,y0)
axs[1,1].plot(x1,np.sign(0.4236*G1+0.6496*G2+0.7514*G3))
axs[1,1].set_title('f3(x)', fontsize=10)
fig.tight_layout()

plt.show()

在这里插入图片描述
最终通过sign分类的线性组合,逐步将训练误差减少到0

案例分析

针对二分类的提升(boosting)方法有两个步骤:
1、改变训练数据的权值或概率分布
2、将弱分类器组合为强分类器

涉及计算内容为:

  • 计算$G_m(x)的系数:
    α m = 1 2 l o g 1 e m e m \alpha_m=\frac{1}{2}log{\frac{1-e_m}{e_m}}
  • 更新权重:
    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}) w m + 1 , i = w m , i Z m e x p ( α m y m G m ( x i ) ) , i = 1 , 2 , . . . , N w_{m+1,i}=\frac{w_{m,i}}{Z_m}exp(-\alpha_my_mG_m(x_i)), \quad i=1,2,...,N 其中, Z m Z_m 是规范化因子,有 Z m = i = 1 N e x p ( α m y m G m ( x i ) ) Z_m=\sum_{i=1}^{N}exp(-\alpha_my_mG_m(x_i))
    当正确分类时: w m + 1 = w m i Z m e α m w_{m+1}=\frac{w_{mi}}{Z_m}e^{-\alpha_m} ,权值缩小
    当错误分类时: w m + 1 = w m i Z m e α m w_{m+1}=\frac{w_{mi}}{Z_m}e^{\alpha_m} ,权值放大

猜你喜欢

转载自blog.csdn.net/houhuipeng/article/details/92800689
今日推荐