XGBoost—AdaBoost算法
2021/12/28 22:08:24
本文主要是介绍XGBoost—AdaBoost算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.XGBoost参考博客:
(89条消息) XGBoost超详细推导,终于有人讲明白了!_abcdefg90876的博客-CSDN博客
(89条消息) xgboost公式推导_guoxinian的专栏-CSDN博客_xgboost公式
(89条消息) XGBoost——机器学习(理论+图解+安装方法+python代码)_机器学习初学者必看,关注我,一起了解机器学习-CSDN博客_python 安装xgboost
2.AdaBoost 自适应增强算法
AdaBoost,是英文"Adaptive Boosting(自适应增强)的缩写,由Yoav Freund和Robert Schapire 1995年提出。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权系数改变后后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个足够小的错误率或达到预先指定的最大迭代次数。
训练过程:
1、初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权重:1/N.
2、训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权重就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。然后,权重更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
3、将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最終的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。
据中学习一系列弱分类器或基本分类器, 然后将这些弱分类楍组合成一个强分类器。
3.Adaboost的算法流程如下:
步骤1. 首先 ,初始化训练数据的权值分布。每一个训练样本最开始时都被陚予相同的权重 :
1
/
N
1 / \mathrm{N}
1/N 。
D
1
=
(
w
11
,
w
12
⋯
w
1
i
⋯
,
w
1
N
)
,
w
1
i
=
1
N
,
i
=
1
,
2
,
⋯
,
N
D_{1}=\left(w_{11}, w_{12} \cdots w_{1 i} \cdots, w_{1 N}\right), w_{1 i}=\frac{1}{N}, i=1,2, \cdots, N
D1=(w11,w12⋯w1i⋯,w1N),w1i=N1,i=1,2,⋯,N
步骤2. 进行多轮迭代,用m = 1,2, …, M表示迭代的第多少轮
a. 使用具有权值分布 Dm的训练数据集学习,得到基本分类器 :
G
m
(
x
)
:
χ
→
{
−
1
,
+
1
}
G_{m}(x): \chi \rightarrow\{-1,+1\}
Gm(x):χ→{−1,+1}
b. 计算
G
m
(
x
)
\mathrm{Gm}(\mathrm{x})
Gm(x) 在训练数据集上的分类误差率
e
m
=
P
(
G
m
(
x
i
)
≠
y
i
)
=
∑
i
=
1
N
w
m
i
I
(
G
m
(
x
i
)
≠
y
i
)
e_{m}=P\left(G_{m}\left(x_{i}\right) \neq y_{i}\right)=\sum_{i=1}^{N} w_{m i} I\left(G_{m}\left(x_{i}\right) \neq y_{i}\right)
em=P(Gm(xi)=yi)=i=1∑NwmiI(Gm(xi)=yi)
由上述式子可知,
Gm
(
x
)
\operatorname{Gm}(\mathrm{x})
Gm(x) 在训练数据集上的误差率
e
m
\mathrm{em}
em 就是被
G
m
(
x
)
\mathrm{Gm}(\mathrm{x})
Gm(x) 误分类样本的权值之和。
c. 计算
G
m
(
x
)
\mathrm{Gm}(\mathrm{x})
Gm(x) 的系数,
a
m
\mathrm{am}
am 表示
G
m
(
x
)
\mathrm{Gm}(\mathrm{x})
Gm(x) 在最终分类器中的重要程度 (目的 : 得到基本分类器在最终分类器中所占的权重 ) :
α
m
=
1
2
log
1
−
e
m
e
m
\alpha_{m}=\frac{1}{2} \log \frac{1-e_{m}}{e_{m}}
αm=21logem1−em
由上述式子可知,em
<
=
1
/
2
<=1 / 2
<=1/2 时,
a
m
>
=
0
\mathrm{am}>=0
am>=0 ,且
a
m
\mathrm{am}
am 随着em的减小而增大,意味着分类误差率越小的基本分类器在最终分类器中的作用越大。 d. 更新训练数据集的权值分布 (目的 : 得到样本的新的权值分布 ),用于下一轮迭代
D
m
+
1
=
(
w
m
+
1
,
1
,
w
m
+
1
,
2
⋯
w
m
+
1
,
i
⋯
,
w
m
+
1
,
N
)
,
w
m
+
1
i
=
w
m
i
Z
m
exp
(
−
α
m
y
i
G
m
(
x
i
)
)
,
i
=
1
,
2
,
⋯
,
N
\begin{aligned} &D_{m+1}=\left(w_{m+1,1}, w_{m+1,2} \cdots w_{m+1, i} \cdots, w_{m+1, N}\right), \\ &w_{m+1 i}=\frac{w_{m i}}{Z_{m}} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right), i=1,2, \cdots, N \end{aligned}
Dm+1=(wm+1,1,wm+1,2⋯wm+1,i⋯,wm+1,N),wm+1i=Zmwmiexp(−αmyiGm(xi)),i=1,2,⋯,N
使得被基本分类器
G
m
(
x
)
\mathrm{Gm}(\mathrm{x})
Gm(x) 误分类样本的权值增大,而被正确分类样本的权值减小。就这样,通过这样的方式,AdaBoost方法能 “聚焦于" 那些较难分 的样本上。
其中,
Z
m
\mathrm{Zm}
Zm 是规范化因子,使得
D
m
+
1
\mathrm{Dm}+1
Dm+1 成为一个概率分布 :
Z
m
=
∑
i
=
1
N
w
m
t
exp
(
−
α
m
y
t
G
m
(
x
t
)
)
Z_{m}=\sum_{i=1}^{N} w_{m t} \exp \left(-\alpha_{m} y_{t} G_{m}\left(x_{t}\right)\right)
Zm=i=1∑Nwmtexp(−αmytGm(xt))
步骤3. 组合各个弱分类器
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
f(x)=\sum_{m=1}^{M} \alpha_{m} G_{m}(x)
f(x)=m=1∑MαmGm(x)
从而得到最㚵分类器,如下:
G
(
x
)
=
sign
(
f
(
x
)
)
=
sign
(
∑
m
=
1
M
α
m
G
m
(
x
)
)
G(x)=\operatorname{sign}(f(x))=\operatorname{sign}\left(\sum_{m=1}^{M} \alpha_{m} G_{m}(x)\right)
G(x)=sign(f(x))=sign(m=1∑MαmGm(x))
选代过程1
对于m=1,在权值分布为D1 (10个数据,每个数据的权值皆初始化为0.1 )的训练数据上,经过计算可得:
1、阈值v取2.5时误差率为0.3 (x< 2.5时取1 , x > 2.5时取-1 ,则6 7 8分错,误差率为0.3)
2、阈值v取5.5时误差率最低为0.4 (x < 5.5时取1 , x > 5.5时取-1,则3 4 5 6 7 8皆分错,误差率0.6大于0.5,不可取。故令x> 5.5时取1, x <5.5时取-1,则01299错,误差率为0.4)
3、 值v取8.5时误差率为0.3 (x < 8.5时取1, x > 8.5时取-1,则3 4 5分错,误差率为0.3)所以无论阈值v取2.5 ,还是8.5 ,总得分错3个样本,故可任取其中任意一个如2.5,弄成第一个基本分类器为:
G
1
(
x
)
=
{
1
,
x
<
2.5
−
1
,
x
>
2.5
G_{1}(x)= \begin{cases}1, & x<2.5 \\ -1, & x>2.5\end{cases}
G1(x)={1,−1,x<2.5x>2.5
上面说阈值
v
v
v 取
2.5
2.5
2.5 时则 67 分错,所以误差率为
0.3
0.3
0.3
从而得到
G
1
(
x
)
G 1(x)
G1(x) 在训练数据集上的误差率
(
(
( 被
G
1
(
x
)
G 1(x)
G1(x) 误分类样本 678 " 的权值之和
)
)
) e1
=
P
(
G
1
(
x
i
)
≠
y
i
)
=
3
∗
0.1
=
0.3
=\mathbf{P}(\mathbf{G} 1(\mathbf{x i}) \neq \mathbf{y i})=\mathbf{3}^{*} \mathbf{0 . 1}=\mathbf{0 . 3}
=P(G1(xi)=yi)=3∗0.1=0.3 。 然后根据误差率
e
\mathrm{e}
e 1计算
G
1
\mathrm{G} 1
G1 的系数:
α
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=21loge11−e1=0.4236
这个
a
1
\mathrm{a} 1
a1 代表
G
1
(
x
)
\mathrm{G} 1(\mathrm{x})
G1(x) 在最终的分类函数中所占的权重,为
0.4236
0.4236
0.4236 。
接着更新训练数据的权值分布,用于下一轮迭代:
D
m
+
1
=
(
w
m
+
1
,
1
,
w
m
+
1
,
2
⋯
w
m
+
1
,
i
⋯
,
w
m
+
1
,
N
)
,
w
m
+
i
=
w
m
i
Z
m
exp
(
−
α
m
y
i
G
m
(
x
i
)
)
,
i
=
1
,
2
,
⋯
,
N
\begin{aligned} &D_{m+1}=\left(w_{m+1,1}, w_{m+1,2} \cdots w_{m+1, i} \cdots, w_{m+1, N}\right), \\ &w_{m+i}=\frac{w_{m i}}{Z_{m}} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right), i=1,2, \cdots, N \end{aligned}
Dm+1=(wm+1,1,wm+1,2⋯wm+1,i⋯,wm+1,N),wm+i=Zmwmiexp(−αmyiGm(xi)),i=1,2,⋯,N
第一轮迭代后,最后得到各个数据新的权值分布D2=( 0.0715, 0.0715,0.0715,0.0715, 0.0715, 0.0715,0166,0166,01666,0.0715)此比可以看出,因为样本中是数据"678"被G1(x)分错了,所以它们的权值由之前的0.1增大到0.1666,反之,其它数据皆被分正确,所以它们的权值皆由之前的0.1减小到0.0715。
分类函数
f
1
(
x
)
=
a
1
∗
G
1
(
x
)
=
0.4236
G
1
(
x
)
f 1(x)=a 1^{*} G 1(x)=0.4236 G 1(x)
f1(x)=a1∗G1(x)=0.4236G1(x) 。
此时,得到的第一个基本分类器sign(f1(x))在训练数据集上有3个误分类点(即6 7 8)。从上述第一轮的整个迭代过程可以看出:被误分类样本的权值之和影响误差率,误差率影响基本分类器在最终分类器中所占的权重。
迭代过程2
对于
m
=
2
m=2
m=2 ,在权值分布为
D
2
=
(
0.0715
,
0.0715
,
0.0715
,
0.0715
,
0.0715
,
0.0715
,
0.1666
,
0.1666
,
0.1666
,
0.0715
)
\mathbf{D} 2=(0.0715,0.0715,0.0715,0.0715,0.0715,0.0715,0.1666,0.1666,0.1666,0.0715)
D2=(0.0715,0.0715,0.0715,0.0715,0.0715,0.0715,0.1666,0.1666,0.1666,0.0715) 的训练数据上,经过计算可 得 :
- 阈值 v v v 取 2.5 2.5 2.5 时误差率为 0.166 6 ⋆ 3 ( x < 2.5 0.1666^{\star} 3\left(x<2.5\right. 0.1666⋆3(x<2.5 时取 1 , x > 2.5 1 , x>2.5 1,x>2.5 时取 − 1 -1 −1 ,则 678 分错,误差率为 0.166 6 ⋆ 3 ) \left.0.1666^{\star} 3\right) 0.1666⋆3) ,
- 阈值v取 5.5 5.5 5.5 时误差率最低为 0.071 5 ⋆ 4 ( x > 5.5 0.0715^{\star} 4\left(x>5.5\right. 0.0715⋆4(x>5.5 时取 1 , x < 5.5 1 , x<5.5 1,x<5.5 时取 − 1 -1 −1 ,则 0129 分错,误差率为 0.071 5 ⋆ 3 + 0.0715 ) \left.0.0715^{\star} 3+0.0715\right) 0.0715⋆3+0.0715) ,
- 呞值v取8.5时误差率为
0.071
5
⋆
3
(
x
<
8.5
0.0715^{\star} 3\left(x<8.5\right.
0.0715⋆3(x<8.5 时取
1
,
x
>
8.5
1 , x>8.5
1,x>8.5 时取
−
1
-1
−1 ,则3 45 分错,误差率为
0.071
5
⋆
3
)
\left.0.0715^{\star} 3\right)
0.0715⋆3) 。
所以,阈值v取8.5时误差率最低,故第二个基本分类器为:
G 2 ( x ) = { 1 , x < 8.5 − 1 , x > 8.5 G_{2}(x)= \begin{cases}1, & x<8.5 \\ -1, & x>8.5\end{cases} G2(x)={1,−1,x<8.5x>8.5
G ( x ) = sign [ f 3 ( x ) ] = sign [ a 1 ∗ G 1 ( x ) + a 2 ∗ G 2 ( x ) + a 3 ∗ G 3 ( x ) ] G ( x ) : n [ f 3 ( x ) ] = sign [ 0.4236 G 1 ( x ) + 0.6496 G 2 ( x ) + 0.7514 G 3 ( x ) ] \begin{aligned} &G(x)=\operatorname{sign}[f 3(x)]=\operatorname{sign}[a 1 * G 1(x)+a 2 * G 2(x)+a 3 * G 3(x)] \\ &G(x): n[f 3(x)]=\operatorname{sign}[0.4236 G 1(x)+0.6496 G 2(x)+0.7514 G 3(x)] \end{aligned} G(x)=sign[f3(x)]=sign[a1∗G1(x)+a2∗G2(x)+a3∗G3(x)]G(x):n[f3(x)]=sign[0.4236G1(x)+0.6496G2(x)+0.7514G3(x)]
这篇关于XGBoost—AdaBoost算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南