AdaBoost算法公式形象的解释

0. 问题引入

在这里插入图片描述在这里插入图片描述

以上是李航的《统计学习方法》中对AdaBoost算法的描述,虽然后文中也对这里的式子进行了注释,但还不是很明朗,下面是我自己的解读。

1. 几个式子的解释

在这里插入图片描述
这里的m代表第m个分类器,第m个分类器的分类误差率为分类错误的样本个数乘以一个系数wmiw_{mi}wmi。m=1时这个系数是1/N,之后会按照下面的公式不断变化:
在这里插入图片描述

这个式子中的关键是αm\alpha_mαm
在这里插入图片描述

由上式可知:
eme_mem小于等于1/2时,αm\alpha_mαm大于等于0,当eme_mem大于1/2时,αm\alpha_mαm小于0。这里我自己来规定一下,当eme_mem小于等于1/2时,被认为是弱分类器,当eme_mem大于1/2时,被认为是错分类器

然后来看式(8.4),首先把这个式子分解为前后两个部分,第一个部分是上一个分类器分类时的系数(这里除以了一个规范化因子ZmZ_mZm),第二部分就是一个指数函数,指数函数的图像如下:
在这里插入图片描述

如果指数小于0,指数函数会大于0且小于1,如果指数大于0,指数函数会大于1 。也就是说指数的大小决定着系数wm+1w_{m+1}wm+1会增大还是减小。这样的话就要对αm,yiGm(xi)\alpha_m,y_iG_m(x_i)αm,yiGm(xi)进行分情况讨论了。

项目弱分类器(误差小于0.5,αm>0\alpha_m>0αm>0)错分类器(误差大于0.5,αm<0\alpha_m<0αm<0
正确分类(yiGm(xi)=1y_iG_m(x_i)=1yiGm(xi)=1)权值减小权值增大
错误分类 (yiGm(xi)=−1y_iG_m(x_i)=-1yiGm(xi)=1)权值增大权值减小

根据AdaBoost的算法思路:“提高那些被前一轮弱分类器错误分类样本的权值。” 我们可以看到上面表格中可以满足这一思路;另外,对于错分类器,我们只要把它的分类结果取反,它就变成了一个弱分类器,结果就像上表中所示。

在这里插入图片描述

最终分类器是所有弱分类器构成的,这里αm\alpha_mαm也会起很大作用。首先对于弱分类器来说分类的错误率越低αm\alpha_mαm的绝对值越大,相应的它在最终分类器中所占表决权越大;另外如果是错分类器αm<0\alpha_m<0αm<0,相当于把Gm(x)G_m(x)Gm(x)预测的结果取反,这样就成了弱分类器。

### AdaBoost算法的数学公式及其推导 #### 加法模型表示 AdaBoost可以被看作是一个加法模型,该模型通过迭代的方式构建一系列弱分类器并将它们组合成强分类器。具体来说,最终得到的强分类器表达式如下: \[f(x) = \sum_{i=1}^{m}\beta_ib(x;\gamma_i)\] 这里\(b(x;\gamma_i)\)代表基学习器(即弱分类器),\(\gamma_i\)是其对应的参数集,而\(\beta_i\)则是分配给每个基学习器的重要性权重[^3]。 #### 弱分类器线性组合 对于二类分类问题,AdaBoost采用了一种特殊的加权投票机制来决定最终预测结果: \[H(x)=sign\left (\sum_{t=1}^{T}\alpha_th_t(x) \right )\] 其中,\(h_t(x)\)表示第\(t\)轮训练产生的弱分类器;\(\alpha_t\)则反映了相应弱分类器在整个集成中的影响力大小。值得注意的是,在每一轮迭代过程中,新的弱分类器会更侧重于那些之前被误判的数据样本,以此提高整体性能[^4]。 #### 权重更新规则 为了使后续加入的弱分类器能够更好地修正之前的错误,需要调整训练集中各个实例的相对重要程度。设当前轮次为\(m\),那么下一个轮次中某个特定样本\(x_i\)的新权重可由下述公式计算得出: \[D_{m+1}(i)=\frac{D_m(i)e^{-y_if(x_i)}}{\sum_j D_m(j)e^{-y_jf(x_j)}}\] 当样本被正确分类时(即\(y_if(x_i)>0\)),指数项将小于1从而降低该样本在未来几轮内的影响;反之如果发生误分,则会使该项增大进而增加这些难处理案例的关注度[^5]。 ```python import numpy as np def update_weights(D, y_true, y_pred): """根据本轮分类情况更新样本权重""" # 计算exp(-yi*fi(xi)) exp_term = np.exp(-y_true * y_pred) # 归一化因子Z Z = sum([d * e for d,e in zip(D, exp_term)]) # 更新后的权重分布 new_D = [(d*e)/Z for d,e in zip(D, exp_term)] return new_D ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

comli_cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值