概念:
通过构建并结合多个学习器完成学习任务,又叫做多分类器系统(multi-classifier system)、基于委员会的学习(commitee-based learning)等,简而言之,就是集合多个弱学习器构成一个强学习器。
对于二分类问题,使用投票法确定分类结果,公式为:
H
(
x
)
=
s
i
g
n
(
∑
i
=
1
T
h
i
(
x
)
)
)
H(x)=sign(\sum_{i=1}^{T}h_{i}(x)))
H(x)=sign(i=1∑Thi(x)))
h
i
h_{i}
hi表示i种分类器,sign()是符号函数,如果有超过半数的弱分类器正确则集成分类器就正确。
根据弱分类器的生成方式,目前的集成学习方法大致可以分为两大类,个体学习器有强依赖关系、序列化生成的串行化方法,如:AdaBoost;不存在强依赖关系、同时生成的并行化方法,如:Bagging和’‘随机森林’'
AdaBoost:
**概念:**初始训练一个基(弱)学习器,再根据基学习器的表现对样本分布进行调整,使得先前基学习器分错的训练样本在后续得到更多关注,不断迭代,直到基学习器数目 到达指定的T个,最后将所有T个基学习器进行加权结合得到一个强学习器,就是Boosting方法。它有很多变种,本文就不一一讨论了,比较常用的是AdaBoost,基于’加性模型‘,即基学习器的线性组合形式。公式如下:
H
(
x
)
=
∑
t
=
1
T
α
t
h
t
(
x
)
H(x)=\sum_{t=1}^{T}\alpha_{t}h_{t}(x)
H(x)=t=1∑Tαtht(x)
代码流程为:样本集
D
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
D={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}
D=(x1,y1),(x2,y2),...,(xm,ym),迭代次数为T。
1、初始化训练样本权重为一样的,另外需要初始化错误率:
ϵ
t
\epsilon_{t}
ϵt=1/m。
ϵ
t
\epsilon_{t}
ϵt在0-1之间,
2、在第t步时,选择可以最小化当前错误率
ϵ
\epsilon
ϵ的弱分类器,并添加这个若分类器以降低错误率,计算
α
t
\alpha _t
αt,
α
t
=
1
2
l
o
g
(
1
−
ϵ
t
ϵ
t
)
\alpha _t=\frac{1}{2}log(\frac{1-\epsilon _t}{\epsilon _t})
αt=21log(ϵt1−ϵt),定义新的弱分类器为
f
t
(
x
)
=
α
t
h
t
(
x
)
f^t(x)=\alpha _th^t(x)
ft(x)=αtht(x),
3、计算新的数据样本权重,
w
i
t
+
1
w_i^{t+1}
wit+1计算公式如下:
w
i
t
+
1
=
w
i
t
Z
e
−
α
t
h
t
(
x
i
)
y
i
w_i^{t+1}=\frac{w_i^t}{Z}e^{-\alpha ^th^t(x_i)y_i}
wit+1=Zwite−αtht(xi)yi
又对于二分类
h
t
(
x
i
)
h^t(x_i)
ht(xi)和yi分别可取{-1,1},则:
w
i
t
+
1
=
{
1
Z
w
i
t
e
−
α
t
,
y
i
=
h
t
(
x
i
)
)
:
c
l
a
s
s
T
r
u
e
1
Z
w
i
t
e
α
t
,
y
i
≠
h
t
(
x
i
)
)
:
c
l
a
s
s
F
a
l
s
e
w_i^{t+1}=\left\{\begin{matrix} \frac{1}{Z}w_i^te^{-\alpha ^t}, y_i=h^t(x_i)):class True\\ \frac{1}{Z}w_i^te^{\alpha ^t}, y_i\neq h^t(x_i)):classFalse \end{matrix}\right.
wit+1={Z1wite−αt,yi=ht(xi)):classTrueZ1witeαt,yi=ht(xi)):classFalse
由公式可知,当t轮分类正确,t+1轮时
w
i
t
+
1
w_i^{t+1}
wit+1减小;当t轮分类错误,则下一个权重
w
i
t
+
1
w_i^{t+1}
wit+1增加,这是符合逻辑的,被错误分类的实例,在下一个分类器应当受到重视!
Z是归一化因子,使得每一轮训练,前面的弱分类器分错的样本权重与分队的样本权重都占总样本权重的1/2。
4、回到2,不断训练,直到收敛。
5、得到的模型为:
H
(
x
)
=
s
i
g
n
(
∑
t
=
1
T
α
t
h
t
(
x
)
)
H(x)=sign(\sum_{t=1}^{T}\alpha ^th^t(x))
H(x)=sign(∑t=1Tαtht(x))
AdaBoost的特点:
1、易于使用,调参少
2、弱分类器可以使任何模型,如逻辑回归、线性回归、决策树等
3、对数据敏感,容易过拟合。可以调整学习率、交叉验证等
4、用来做特征选择。
【注】对强分类器输出结果去sign,实际分类中可以找一个阈值或边界!
代码解读:
后续添加
Bagging和随机森林:
Bagging:
概念:并行式集成学习的常用方法,给定包含m个样本的数据集,采用’随机采样‘的方式,就是有放回的每次从训练集中采集固定个数的样本,也就是有的样本被多次采集而有的从未被采集。采样出T个含m个训练样本的采样集,基于每个采样集训练一个基(弱)学习器,在将这些基学习器组合构成强学习器,就是Bagging方法。
【注】对于一个样本,它在某一次训练集的随机采样中,被采集到的概率是
1
m
\frac{1}{m}
m1。不被采集到的概率为
1
−
1
m
1-\frac{1}{m}
1−m1。如果m次采样都没有被采集中的概率是
(
1
−
1
m
)
m
{(1-\frac{1}{m})}^m
(1−m1)m。当
m
→
∞
m\rightarrow \infty
m→∞时,
(
1
−
1
m
)
m
→
1
e
≃
0.368
{(1-\frac{1}{m})}^m\rightarrow \frac{1}{e}\simeq 0.368
(1−m1)m→e1≃0.368。也就是说,在bagging的每轮随机采样中,训练集中大约有36.8%的数据没有被采样集采集中。这部分被叫着袋外数据(Out Of Bag)。
伪代码流程:
样本集
D
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
D={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}
D=(x1,y1),(x2,y2),...,(xm,ym),迭代次数为T
- 对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集 D t D_t Dt,
- 用采样集 D t D_t Dt训练第t个弱学习器 h t ( x ) h_t(x) ht(x)
- T=1,2…m,迭代T次得到T个弱学习器组成一个强学习器。
【注】如果是分类算法预测,投票法:T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,平均法:T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
Bagging的特点:
- 和Adaboost一样,对于弱学习器没有限制。从偏差-方差分解角度来看,Bagging关注降低方差,因此其在决策树、神经网络等易受样本扰动的学习器上效果更为明显。
- 由于Bagging算法每次都进行’随机采样‘来训练模型,因此泛化能力很强,利于降低模型的方差。当然对于训练集的拟合程度就会差一些,也就是模型的偏差会大一些。
代码解读:
后续添加
随机森林(Random Forest):
概念:改进版的Bagging。思想上和训练过程和Bagging是一样的,做了一些改进,1)RF使用了CART决策树作为弱学习器;2)对决策树的建立做了改进,传统的决策树在选择划分属性(假设d个)时是在当前结点的属性集合中选择一个最优属性;而在RF中,先从该结点的属性集合中随机选择一个包含k个属性的子集,再从这个子集中选择最优属性来划分,就是随机森林的基本流程。
【注】:k控制了随机性的引入程度,k=d时,决策树构建方法与传统决策树相同,而当k=1时,则是随机选择一个属性进行划分。一般去k=
l
o
g
2
d
log_2d
log2d。
算法流程:
同Bagging
RF的特点:
- 简单、易于实现、计算量小。
- k越小,模型越健壮,但对于数据集的拟合程度就会越差。即k越小,模型方差越小,变差越大。可通过交叉验证选择一个合适的k值。
- 随机性的考察属性子集使得RF的泛化能力很强。
策略介绍:
先假定集成学习包含T个基学习器{ h 1 , h 2 , . . . , h T h_1,h_2,...,h_T h1,h2,...,hT},其中 h 1 h_1 h1在示例x上的输出为 h i ( x ) h_i(x) hi(x)。
平均法:
1、简单平均法:
H
(
x
)
=
1
T
∑
i
=
1
T
h
i
(
x
)
H(x)=\frac{1}{T}\sum_{i=1}^{T}h_i(x)
H(x)=T1i=1∑Thi(x)
2、加权平均法:
H
(
x
)
=
∑
i
=
1
T
w
i
h
i
(
x
)
H(x)=\sum_{i=1}^{T}w_ih_i(x)
H(x)=i=1∑Twihi(x)
其中:
∑
i
=
1
T
w
i
=
1
\sum_{i=1}^{T}w_i=1
∑i=1Twi=1。
投票法:
1、绝对多数投票法:
H
(
x
)
=
{
c
j
i
f
∑
i
=
1
T
h
i
j
(
x
)
>
1
2
∑
k
=
1
N
∑
i
=
1
T
h
i
k
(
x
)
;
r
e
j
e
c
t
o
t
h
e
r
w
i
s
e
.
H(x)=\left\{\begin{matrix} c_j & if \sum_{i=1}^{T}h_i^j(x) > \frac{1}{2}\sum_{k=1}^{N}\sum_{i=1}^{T}h_i^k(x);\\ reject & otherwise. \end{matrix}\right.
H(x)={cjrejectif∑i=1Thij(x)>21∑k=1N∑i=1Thik(x);otherwise.
即某标记投票过半数,则预测为该label,否则拒绝预测。
2、相对多数投票法:
H
(
x
)
=
c
a
r
g
m
a
x
j
∑
i
=
1
T
h
i
j
(
x
)
H(x)=c_{\underset{j}{argmax}\sum_{i=1}^{T}h_i^j(x)}
H(x)=cjargmax∑i=1Thij(x)
即预测为得票最多的label,弱同时有多个label获最高票,则随机选择一个。
3、加权投票法:
H
(
x
)
=
c
a
r
g
m
a
x
j
∑
i
=
1
T
w
i
h
i
j
(
x
)
H(x)=c_{\underset{j}{argmax}\sum_{i=1}^{T}w_ih_i^j(x)}
H(x)=cjargmax∑i=1Twihij(x)
w
i
w_i
wi是
h
i
h_i
hi的权重,且
∑
i
=
1
T
w
i
=
1
\sum_{i=1}^{T}w_i=1
∑i=1Twi=1。
以上都是比较常用的方法!还有一些其他的学习策略,不一一介绍了,基本上是一些变种或者结合形式的,有兴趣再看。
待续…