1 Boosting
∙
\bullet
∙ Boosting:将弱学习器组合成强学习器。
∙
\bullet
∙ 构造一个性能很高的预测(强学习器)是一件很困难的事情
∙
\bullet
∙ 但构造一个性能一般的预测(弱学习器)并不难
∙
\bullet
∙ 弱学习器:性能比随机猜测略好(如层数不深的决策树)
∙
\bullet
∙ Boosting学习框架
∙
\bullet
∙ 学习第一个弱学习器
ϕ
1
\phi_1
ϕ1
∙
\bullet
∙ 学习第二个弱学习器
ϕ
2
\phi_2
ϕ2
∙
\bullet
∙ …
∙
\bullet
∙ 组合所有的弱学习器:
f
(
x
)
=
∑
m
=
1
M
α
m
ϕ
m
(
x
)
f(x) = \sum_{m=1}^{M}\alpha_m\phi_m(\mathbf x)
f(x)=∑m=1Mαmϕm(x)
∙
\bullet
∙ Boosting的弱学习器是按顺序学习的,相互之间并不独立。而Bagging则需要booststrap采样,然后独立地训练弱学习器。
2 怎样得到互不的学习器?
∙
\bullet
∙ 在不同的训练集上训练学习器
∙
\bullet
∙ 怎么得到不同的训练集呢?
∙
\bullet
∙ 对原始训练集重采样
∙
\bullet
∙ 对原始训练集重新加权
∙
\bullet
∙ 在实际操作中改变目标函数即可。
思考问题:为什么改变样本的权重,有利于对该样本进行准确的预测?
3 AdaBoost的基本思想
∙
\bullet
∙ Adaptive Boosting:自适应增强
∙
\bullet
∙ 在弱学习器
ϕ
1
\phi_1
ϕ1失败的样本上学习第二个弱学习器
ϕ
2
\phi_2
ϕ2
∙
\bullet
∙ 令弱学习器
ϕ
1
\phi_1
ϕ1在其训练集上的误差为:
ε
1
=
∑
i
=
1
N
w
1
,
i
I
(
ϕ
1
(
x
)
≠
y
i
)
z
1
,
Z
1
=
∑
i
=
1
N
w
1
,
i
,
w
1
,
i
=
1
/
N
\varepsilon_1 = \frac{\sum_{i=1}^{N}w_{1,i}\mathbb I(\phi_1(\mathbf x) \neq y_i)}{z_1}, Z_1 = \sum_{i=1}^{N}w_{1,i}, w_{1,i} = 1/N
ε1=z1∑i=1Nw1,iI(ϕ1(x)=yi),Z1=i=1∑Nw1,i,w1,i=1/N
∙
\bullet
∙ 将权重由
w
1
w_1
w1变为
w
2
w_2
w2,使得:
ε
2
=
∑
i
=
1
N
w
2
,
i
I
(
ϕ
1
(
x
)
≠
y
i
)
z
2
=
1
2
,即学习器
ϕ
1
在训练集
2
上的性能为随机猜测
\varepsilon_2 = \frac{\sum_{i=1}^{N}w_{2,i}\mathbb I(\phi_1(\mathbf x) \neq y_i)}{z_2} = \frac{1}{2},即学习器\phi_1在训练集2上的性能为随机猜测
ε2=z2∑i=1Nw2,iI(ϕ1(x)=yi)=21,即学习器ϕ1在训练集2上的性能为随机猜测
∙
\bullet
∙ 根据权重
w
2
\mathbf w_2
w2训练弱学习器
ϕ
2
\phi_2
ϕ2
4 样本重新加权
∙
\bullet
∙ 应如何加权呢?分对的样本,其权重除以
d
1
d_1
d1,使权重减小;分错的样本,其权重乘以
d
1
d_1
d1,使权重增大;很明显
d
1
d_1
d1的值应大于1,下面对
d
1
d_1
d1的值进行推导。个人推断:若要使上图中倒数第二个等式能推导出倒数第一个等式,需要满足条件:对于
ϕ
1
\phi_1
ϕ1在训练集2上出错的样本,
ϕ
1
\phi_1
ϕ1在训练集上1相同样本同样出错,才能都是乘以
d
i
d_i
di的关系。正确的样本,同样存在这个现象。
∙
\bullet
∙ 以上推导过程的自然语言描述:
1) 利用
ϕ
1
\phi_1
ϕ1在权重为
w
2
w_2
w2的训练集上的误差为
1
2
\frac{1}{2}
21的条件,推导出预测正确的
w
2
w_2
w2权重和 = 预测错误的
w
2
w_2
w2权重和。
2) 将
w
2
w_2
w2和
w
1
w_1
w1之间或除以
d
1
d_1
d1或乘以
d
1
d_1
d1的关系代入上一步的等式,得到一个新的等式。
3) 针对上一步得到的等式,将
d
1
d_1
d1的部分提出连加符号,连加符号中生育的部分与
ε
1
\varepsilon_1
ε1存在数量关系,代入这个数量关系,最后就能求出
d
1
d_1
d1。
5 AdaBoost M1算法
给定训练集:
(
x
1
,
y
1
)
,
.
.
.
,
(
x
N
,
y
N
)
(\mathbf x_1,y_1),...,(\mathbf x_N,y_N)
(x1,y1),...,(xN,yN),其中
y
i
∈
{
1
,
−
1
}
y_i \in \{1,-1\}
yi∈{1,−1}表示
x
i
\mathbf x_i
xi的类别标签
训练集上样本的初始:
w
1
,
i
=
1
N
w_{1,i} = \frac{1}{N}
w1,i=N1
对 m = 1:M,
对训练样本采用
w
m
,
i
w_{m,i}
wm,i计算弱分类器
ϕ
m
(
x
)
\phi_m(\mathbf x)
ϕm(x)
计算该若分类器
ϕ
m
(
x
)
\phi_m(\mathbf x)
ϕm(x)在分布
w
m
w_m
wm上的错误率:
ε
m
=
∑
i
=
1
N
w
m
,
i
I
(
ϕ
m
(
x
i
)
≠
y
i
)
∑
i
=
1
N
w
m
,
i
\varepsilon_m = \frac{\sum_{i=1}^{N}w_{m,i}\mathbb I(\phi_m(\mathbf x_i) \neq y_i)}{\sum_{i=1}^{N}w_{m,i}}
εm=∑i=1Nwm,i∑i=1Nwm,iI(ϕm(xi)=yi)
计算:
d
m
=
(
1
−
ε
m
)
/
ε
m
,
α
m
=
l
o
g
(
d
m
)
=
1
2
l
o
g
1
−
ϵ
m
ϵ
m
d_m = \sqrt{(1-\varepsilon_m)/\varepsilon_m},\alpha_m=log(d_m) = \frac{1}{2}log\frac{1-\epsilon_m}{\epsilon_m}
dm=(1−εm)/εm,αm=log(dm)=21logϵm1−ϵm
更新训练样本的分布:
w
m
+
1
,
i
=
w
m
,
i
e
x
p
(
−
α
m
y
i
ϕ
m
(
x
i
)
)
Z
m
+
1
w_{m+1,i} = \frac{w_{m,i}exp(-\alpha_my_i\phi_m(\mathbf x_i))}{Z_{m+1}}
wm+1,i=Zm+1wm,iexp(−αmyiϕm(xi)),分对的样本:
y
i
ϕ
m
(
x
i
)
=
1
y_i\phi_m(\mathbf x_i) = 1
yiϕm(xi)=1,否则为-1。
其中
Z
m
+
1
=
∑
i
=
1
N
w
m
+
1
,
i
Z_{m+1} = \sum_{i=1}^{N}w_{m+1,i}
Zm+1=∑i=1Nwm+1,i为归一化常数,使得
w
m
+
1
w_{m+1}
wm+1是一个分布。
最后的强分类器为:
f
(
x
)
=
s
g
n
(
∑
m
=
1
M
α
m
ϕ
m
(
x
)
)
f(x) = sgn(\sum_{m=1}^{M}\alpha_m\phi_m(\mathbf x))
f(x)=sgn(∑m=1Mαmϕm(x))
6 证明:随着弱学习器的数目增多,训练误差越来越小。
以上四个PPT没讲,只讲了指数损失的值会大于等于01损失。也提到了,Logitsit用的是类似于logitstic损失(这个描述可能不对),SVM用到的是合页损失,而Adaboost用到的就是指数损失。
7 测试误差
左图应该是模型复杂度M和误差之间的关系。当M增大时,Adaboost的测试误差不会像复杂度一样,先下降后增大,而是会一直下降,类似于Bagging,但跟bagging又可能不那么一样,具体取决于数据。
∙
\bullet
∙ 测试误差随着M的增加而减小可用间隔来解释。
∙
\bullet
∙ 上述训练误差(0-1损失)只考虑了分类是否正确,还应考虑分类的置信度。
∙
\bullet
∙ 分类的置信度,判别函数的值yf(x)。
train error是0-1损失,5的时候就已经为0了。而margins是置信度,5的时候还是有一点点,但M再增大到100,就没有了,也就是会被分的越开。那么问题来了,置信度不是越大越好吗?yf(x),这样的表达式得到的不是1、-1这样的值吗?是不是这里的f(x)不是类别?或不是最终类别,只是一个类似于概率这样数据。