集成学习-AdaBoost更新准则推导 西瓜书

本文深入解析AdaBoost算法的原理,包括损失函数的概念及其在AdaBoost中的应用,详细推导了分类器的重要性和样本权重更新规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.损失函数

上一篇文章简单介绍了集成学习和弱学习器的理论概率,最后给出了AdaBoost的伪代码与实现步骤,思路比较清晰,这篇文章主要针对分类器的重要性α与分布权重Dt的更新规则进行推导.推导之前先看一下常见的损失函数(损失函数在SVM(3)里介绍过,这里只给出损失函数形式):

                                                            

                                                            

                                                            

损失函数(loss function)用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型就更鲁棒。

2.AdabBoost的损失函数

AdaBoost算法有多种推导方式,最常见的是基于‘加性模型’,即基学习器的线性加权:

                                                                        

最小化损失函数(指数损失)

                                                         

其中f(x)为真实值,H(x)为真实值,二者均为二值型(-1,1),若H(x)能令损失函数最小化,则考虑上式对H(x)的偏导:

                

                                   

令导数为0,求解:

                                    

                                                     

                                                        

因此有:

                                        

                                                           

                                                           

这意味着sign(H(x))达到了贝叶斯最优错误率,也就是说指数损失函数最小化时,分类错误率也将最小.

3.分类器重要性α更新规则

推导前先回顾一下算法的伪代码:

                    

开始论证~在AdaBoost中,第一个分类器h1是通过基学习算法用于初始数据分不而得,此后迭代生成ht和αt,当基分类器ht基于Dt产生后,该基分类器权重αt应使得αtht最小化损失函数.

                                               

                                                                    

                                                                    

                                                                    

当前基学习器分类错误的概率:

                                                                

对损失函数求导:

                                                        

令导数为0得:

                                                                            

恰好对应伪代码的第六步.

4.样本权重Dt更新规则

AdaBoost在获得Ht-1之后样本分布将进行调整,增加分类错误样本的权数,减少分类正确样本的权数,使下一轮基学习器ht能够纠正Ht-1的一些错误,理想的ht能够纠正Ht-1的全部错误,即最小化:

                                        

                                                                       

e^x在x=0处的泰勒展开

                                                

将损失函数中ht(x)部分泰勒展开得(此处忽略了余项):

                                        

                                                                        

因为f(x),h(x) ∈ {-1,1}

此时理想的基学习器h(t)应满足

                                                

                                                    

                                                    

这里运用对偶将min转化为max,有点类似支持向量机求最优间隔的方法,而且在优化问题中加入常数不影响最终的结果.

这里Dt表示一个分布

                                                                    

这里其实就大概了解了为什么要在更新Dt时下面引入zt去规范化分布.

根据数学期望定义,这里等价于:

                                                                    

这里注意求期望的x范围不是D,而是Dt.

由于f(x),h(x) ∈ {-1,1}:

                                                            

将上式整理为1个式子,这里I(x)为示性函数

                                                            

则理想的ht:

                                                        

由此可见理想的ht是在分布Dt下最小化分类误差,因此,弱分类器基于Dt来训练,且错误率应1小于50%(伪代码第五步),考虑Dt与Dt+1的关系:

                                                        

                                                                      

                                                                      

这里对应伪代码第七步的权值更新.

总结:

通过这两篇文章的理论推导,AdaBoost的大致过程已经比较清晰了,证明步骤基本都是参考西瓜书,只是对其中一小部分加了一些小的注解,有问题欢迎大家交流~下一节将就实例python编码看一下针对具体的数据,集成学习是如何一步一步更新权值缩小泛化误差的.

### 集成学习 AdaBoost 算法的原理、实现与应用 #### 1. AdaBoost 的基本概念 AdaBoost 是一种经典的集成学习方法,属于提升(Boosting)类算法。它通过组合多个弱分类器来构建一个强分类器,从而提高整体预测性能[^1]。 #### 2. AdaBoost 的核心原理 AdaBoost 的工作流程可以分为以下几个方面: - **初始化样本权重**:在训练开始时,给定的数据集中每个样本被赋予相同的初始权重 \( w_i^{(0)} = \frac{1}{N} \),其中 \( N \) 表示样本总数。 - **迭代训练弱分类器**:在每次迭代过程中,基于当前样本权重分布训练一个弱分类器 \( G_m(x) \)[^3]。弱分类器的选择通常依赖于特定的任务需求,例如决策树桩或其他简单的模型。 - **计算误差率**:对于第 \( m \) 轮训练得到的弱分类器 \( G_m(x) \),其误差率为: \[ e_m = \sum_{i=1}^N w_i^{(m)} I(G_m(x_i) \neq y_i) \] 这里 \( I(\cdot) \) 是指示函数,当条件成立时取值为 1,否则为 0[^3]。 - **调整弱分类器权重**:根据误差率 \( e_m \),计算对应的权重系数 \( \alpha_m \): \[ \alpha_m = \frac{1}{2} \ln{\left(\frac{1-e_m}{e_m}\right)} \][^3] - **更新样本权重**:为了使后续轮次更加关注错误分类的样本,需重新分配样本权重: \[ w_i^{(m+1)} = \frac{w_i^{(m)}}{Z_m} \times \begin{cases} e^{-\alpha_m}, & \text{if } G_m(x_i) = y_i \\ e^{\alpha_m}, & \text{otherwise} \end{cases} \] 其中 \( Z_m \) 是规范化因子,用于确保新的权重和仍为 1。 - **最终强分类器**:经过 \( M \) 轮迭代后,将所有弱分类器加权组合形成最终的强分类器: \[ F(x) = \text{sign}\left(\sum_{m=1}^M \alpha_m G_m(x)\right) \][^3] #### 3. AdaBoost 的 Python 实现 以下是 AdaBoost 算法的一个简单实现示例,使用的是二分类任务: ```python import numpy as np from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split class AdaBoost: def __init__(self, n_estimators=50): self.n_estimators = n_estimators self.alphas = [] self.estimators = [] def fit(self, X, y): n_samples, _ = X.shape w = np.full(n_samples, (1 / n_samples)) for _ in range(self.n_estimators): clf = DecisionTreeClassifier(max_depth=1) clf.fit(X, y, sample_weight=w) pred = clf.predict(X) error = sum(w[i] * (pred[i] != y[i]) for i in range(n_samples)) / sum(w) alpha = 0.5 * np.log((1 - error) / (error + 1e-10)) w *= np.exp(-alpha * y * pred) w /= np.sum(w) self.alphas.append(alpha) self.estimators.append(clf) def predict(self, X): preds = [clf.predict(X) for clf in self.estimators] weighted_preds = np.array([alpha * pred for alpha, pred in zip(self.alphas, preds)]) return np.sign(weighted_preds.sum(axis=0)) # 测试代码 X, y = make_classification(n_samples=100, n_features=20, random_state=42) y[y == 0] = -1 # 将标签转换为 {-1, 1} X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) model = AdaBoost() model.fit(X_train, y_train) predictions = model.predict(X_test) accuracy = np.mean(predictions == y_test) print(f"Accuracy: {accuracy}") ``` #### 4. AdaBoost 的应用场景 AdaBoost 广泛应用于多种领域,包括但不限于以下场景: - **图像识别**:利用 AdaBoost 提高人脸识别或物体检测的准确性[^2]。 - **信用评分**:通过对客户行为特征的学习,评估客户的违约风险[^1]。 - **医疗诊断**:结合患者病历数据和其他指标,辅助医生做出更精准的疾病判断[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BIT_666

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

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

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

打赏作者

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

抵扣说明:

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

余额充值