AdaBoost算法详解及python实现Python机器学习系列(十八)
Posted 侯小啾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AdaBoost算法详解及python实现Python机器学习系列(十八)相关的知识,希望对你有一定的参考价值。
文章目录
1. AdaBoost 算法简介
Boosting是机器学习的三大框架之一,其特点是,训练过程中的诸多弱模型,彼此之间有着强依赖关系。Boost也被称为增强学习或提升法。典型的代表算法是AdaBoost算法。AdaBoost算法的核心思想是:将关注点放在预测错误的样本上。
AdaBoost 算法可以概括如下:
①假设共有m个样本数据,首先根据需求划分好训练集数据,按照一般思路,训练出第一个弱模型
G
1
(
x
)
G_1(x)
G1(x)。
②对第一个弱模型
G
1
(
x
)
G_1(x)
G1(x),计算该弱模型的分类错误率(或者说带权错误率,但是因为第一次迭代训练是均等权重的,所以第一次迭代的带权错误率等于普通的分类错误率)。
通过计算的分类错误率来确定该弱模型的权重,并更新训练集数据的权值分布。
(这里涉及两个权重不要弄混,先是模型权重,再是样本数据权重)
记模型
G
1
(
x
)
G_1(x)
G1(x)的权重为
α
1
\\alpha_1
α1,则
F
1
(
x
)
=
0
+
α
1
G
1
(
x
)
F_1(x)=0+\\alpha_1G_1(x)
F1(x)=0+α1G1(x)(因为是第一次迭代,所以上一次可以暂记为0)。
③开始第二次迭代,使用更新后的样本权重再次训练一个弱模型,然后将该弱模型与上一次训练的弱模型
G
2
(
x
)
G_2(x)
G2(x),按照一定的规则得到的模型权重进行复合,
F
2
(
x
)
=
F
1
(
x
)
+
α
2
G
2
(
x
)
F_2(x)=F_1(x) + \\alpha_2 G_2(x)
F2(x)=F1(x)+α2G2(x)。
遂得到模型
F
2
(
x
)
F_2(x)
F2(x)。
这里的重点,就在于
α
1
,
α
2
\\alpha_1,\\alpha_2
α1,α2等,这些模型的权重的确定。
④循环以上过程n次(从第二次开始,每次计算的模型错误率,是带权错误率)。
(n的值是自己指定的,希望的迭代次数)。
直到得到模型
F
n
(
x
)
=
F
n
−
1
(
x
)
+
G
n
(
x
)
F_n(x)=F_n-1(x)+G_n(x)
Fn(x)=Fn−1(x)+Gn(x),即为AdaBoost算法的输出模型,此时的模型
F
n
(
x
)
F_n(x)
Fn(x)是一个强训练模型。
2. AdaBoost算法 逻辑详解
按照以上思路,下边开始针对其中涉及的细节进行详解。
2.1 数据
首先要面对的,是数据。假设样本数据集D中共有m个样本,并表示如下:
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)
其中
x
i
x_i
xi是特征向量,
y
i
y_i
yi是标签。标签的取值可以是1和-1。
AdaBoost算法每次训练模型的时候,使用的可以是从m个样本中抽样抽出的部分样本,但是预测的时候必须统一,测试集必须是固定的m个样本。
2.2 带权错误率
使用AdaBoost算法,每次训练完弱模型后,需要进一步计算出其带权错误率。
带权错误率的公式如下:
ε
j
=
∑
i
=
1
m
ω
i
j
I
f
j
(
x
)
≠
y
i
\\varepsilon_j=\\sum_i=1^m \\omega_ijI\\f_j(x)≠y_i\\
εj=∑i=1mωijIfj(x)=yi
如何理解这个式子:其中
I
(
)
I()
I()是指示函数,即,当括号内条件满足时值为1,当不满足条件时值为0。
这里括号内的条件,即表示对某样本的分类不正确。可以看出,预测错误的样本越多,该值则越大。
ω
i
j
\\omega_ij
ωij即第j次迭代中的第i个样本的权重。
在第一次迭代中第一次训练弱模型时,每个样本的初始权重是均等的,均为
1
m
\\frac1m
m1。
即每个样本被选中的概率是均等的。AdaBoost算法首先基于该均等的权重训练一个简单的弱学习器。
且因为均等权重,在第一次迭代的输出的弱分类器的带权错误率,是刚好等于预测错误的个数在m个样本中所占的比重的。(即带权错误率等于普通的分类错误率)。
2.3 损失函数 与 确定样本权重
AdaBoost算法的损失函数为指数损失。
以第k次迭代为例,第k次迭代将得到模型
F
k
(
x
)
=
F
k
−
1
(
x
)
+
α
k
G
(
x
)
F_k(x)=F_k-1(x)+\\alpha_kG(x)
Fk(x)=Fk−1(x)+αkG(x),则
F
k
(
x
)
F_k(x)
Fk(x)的损失函数函数为:
L
o
s
s
=
∑
i
=
1
m
e
−
y
i
F
k
(
x
i
)
Loss=\\sum_i=1^me^-y_iF_k(x_i)
Loss=∑i=1me−yiFk(xi)
经简单分析,可以看出,对于每个样本
若预测正确,则指数为负,损失只增加
1
e
\\frac1e
e1;
若预测错误,则损失函数的损失会增加e。
将该损失函数进行进一步展开得:
L
o
s
s
=
∑
i
=
1
m
e
−
y
i
F
k
(
x
i
)
Loss=\\sum_i=1^me^-y_iF_k(x_i)
Loss=∑i=1me−yiFk(xi)
=
∑
i
=
1
m
e
−
y
i
(
F
k
−
1
(
x
i
)
+
α
k
G
(
x
i
)
)
=\\sum_i=1^me^-y_i(F_k-1(x_i)+\\alpha_kG(x_i))
=∑i=1me−yi(Fk−1以上是关于AdaBoost算法详解及python实现Python机器学习系列(十八)的主要内容,如果未能解决你的问题,请参考以下文章