ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

XGBoost—AdaBoost算法

2021-12-28 21:30:34  阅读:221  来源: 互联网

标签:XGBoost 误差率 0.0715 分类器 算法 AdaBoost 权值 Gm mathrm


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,误差率,0.0715,分类器,算法,AdaBoost,权值,Gm,mathrm
来源: https://blog.csdn.net/weixin_43694742/article/details/122202182

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有