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∑N​wmi​I(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​=21​logem​1−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​=Zm​wmi​​exp(−αm​yi​Gm​(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∑N​wmt​exp(−αm​yt​Gm​(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​αm​Gm​(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​αm​Gm​(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​=21​loge1​1−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​=Zm​wmi​​exp(−αm​yi​Gm​(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) 的训练数据上,经过计算可 得 :

  1. 阈值 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) ,
  2. 阈值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) ,
  3. 呞值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算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程