AdaBoost

AdaBoost是一种迭代算法,通过结合多个弱分类器形成强分类器。它根据训练数据的分类误差率动态调整样本权重,误差率低的分类器在最终分类器中占比更高。每轮迭代中,错误分类的样本权值会被增加,以便后续分类器更关注这些样本。算法包括初始化权值、训练弱分类器、计算分类器权重和更新样本权值等步骤。

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

总说

AdaBoost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器。(很多博客里说的三个臭皮匠赛过诸葛亮)

先说说啥叫强/弱分类器:
弱学习算法—识别错误率小于1/2(即准确率仅比随机猜测略高的学习算法)
强学习算法—识别准确率很高并能在多项式时间内完成的学习算法

算法

正宗算法

(先说明一下,如果看这块有点儿费劲的话,可以看下面“瞎扯算法”,两者思想一样,只是后者更加口头化,容易记住。)
给定一个训练数据集T=(x1,y1),(x2,y2)(xN,yN),其中实例xX,而实例空间XRn,yi属于标记集合{-1,+1},Adaboost的目的就是从训练数据中学习一系列弱分类器或基本分类器,然后将这些弱分类器组合成一个强分类器。

I. 初始化权值,每个样本的权重相同

D1=(w11,w12,,w1N),w1i=1N,i=1,2,,N

II. 进行多轮迭代,用m = 1,2, …, M表示迭代的第多少轮
  1. 使用具有权值分布Dm的训练数据集学习,得到基本分类器:
    Gm(x):χ1,+1
  2. 计算Gm(x)在训练数据集上的分类误差率:
    εm=P(Gm(xi)yi)=i=1NwmiI(Gm(xi)yi)

    注意,从这里看出,误差率就是分类错误的样本的权值之和!
  3. 得到ε后,再要得到这个分类器占最终分类器的比重α
    αm=12ln1εmεm

    注意:可以看出如果误差率小于1/2,那么αm就会大于0,也就是说只有这个分类器能把误差率保证在大于1/2的情况下,才能有α,也就是说才能在最终的分类其中占有权重。此外可以看出,误差率越小,α越大,也就是说越好的分类器在最终的分类器所占的权重越大。
  4. 更新样本权值
    Dm+1=(Wm+1,1,,Wm+1,N)

    Wm+1,i=WmiZmexp(αmyiGm(xi))

    ( 我擦,markdown的下标咋这么大啊,不知道咋变小~~,顺便说一下,w的下标标注方式前后有些不一样,为了更好看清,在m+1与数字之间加了逗号。)
    其中下面的Zm就是规范化因子。
    Zm=i=1NWmiexp(αmyiGm(xi))

III.组合所有弱分类器

f(x)=m=1MαmGm(x)

最终:、
G(x)=sign(f(x))=sign(m=1MαmGm(x))

瞎扯算法

  1. 开始时,让每个样本分配相同的权重。
  2. 计算这一轮的 εα.
    计算 ε: 只要把分错的权重加起来就行了;
    计算α: 利用上面的公式

  3. 上面2个还是很简单的,现在要计算下一轮的权重咋重新分配。好好看看这公式:

    Dm+1=(Wm+1,1,,Wm+1,N)

    Wm+1,i=WmiZmexp(αmyiGm(xi))

可以看出,Wm+1,i是由Wmi得到的,也就是说第m+1轮的第i个样本的权值是由该样本在上一轮的权值经过变换而来。 再看看 exp(αmyiGm(xi)),其中 yi是标签,而Gm(xi)是通过第m轮的分类器预测的分类。显然:yiGm(xi)只有1和-1的取值,分别对应分类正确和错误
为了方便,可以这样,弄出个中间变量Tm+1,i
Tm+1,i=Wmiexp(αmyiGm(xi))

Tm+1,i={Wmiexp(α),Wmiexp(α),

记忆方法:分的权值就增大,分的就减少。即把分错的权值加大。
其实这样就差不多了,但是为了规则化,所以就弄个正规化,除以总的Tm+1就可以了。

4.. 知道每次权值如何更新的话,然后就不断的做呗,直到达到结束条件( ε小于某个给定的值或是循环次数达到上限之类的)
5. 最后再把所有的分类器按照各自的权值αi组合起来就可以。

AdaBoost举例



首先,每个样本权值为0.1,第一个分类器,分类错误个数是3个,故 ε1=0.3,算得 α1=0.42,再重新分配权值,将画圈的3个“+”增大权值。

T("+")=0.1e0.42=0.152

T(=0.1e0.42=0.065

再正规化
Z=0.1523+0.0657=0.911

W("+")=T("+")0.911=0.167

W(=0.071

第二次:
这里写图片描述
三个画圈”—”分错,
ε=0.0713=0.21
下面的计算略。
这里写图片描述
整合分类器:
这里写图片描述

说一下为啥分错的权值反而会变高,因为最终的分类器是所有分类器依据权值的组合啊,当然是希望分类效果好点的能占的比重高点,提高分错的样本的权重,当后面的分类器再次把这个分错时,就会提高错误率,错误率升高,那么这个分类器所占的比重就会降低。这样就可以让好的分类器占的比重高,不怎么好的占的比重低。

### AdaBoost算法的实现原理 AdaBoost(Adaptive Boosting)是一种经典的提升(Boosting)算法,最初由Yoav Freund和Robert Schapire于1995年提出[^1]。该算法的核心思想在于通过多次迭代训练多个弱学习器,并根据每次预测的结果调整样本权重,使得后续的学习器更加关注之前被错误分类的样本。 具体来说,AdaBoost的工作流程如下: 1. 初始化数据集中的每个样本权重为相等值。 2. 在每一轮迭代中,基于当前样本权重训练一个弱学习器。 3. 计算弱学习器的误差率以及对应的权重系数α。 4. 更新样本权重,增加那些被误分类样本的权重,减少正确分类样本的权重。 5. 将本轮得到的弱学习器加入到最终模型中,形成加权投票机制。 6. 循环上述过程直到达到预设的最大迭代次数或满足其他停止条件。 这种逐步改进的过程能够有效提高整体模型的表现能力。 ```python from sklearn.ensemble import AdaBoostClassifier from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split # 创建模拟数据集 X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10, random_state=42) # 划分训练集与测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42) # 构建AdaBoost分类器,默认基估计器为决策树桩 ada_clf = AdaBoostClassifier(n_estimators=50, learning_rate=1.0, random_state=42) # 模型拟合 ada_clf.fit(X_train, y_train) # 输出模型得分 print(f"Training Accuracy: {ada_clf.score(X_train, y_train)}") print(f"Test Accuracy: {ada_clf.score(X_test, y_test)}") ``` 以上代码展示了如何利用`scikit-learn`库快速构建并评估一个简单的AdaBoost分类器[^2]。 ### 使用案例分析 AdaBoost在实际应用中有许多成功案例,尤其是在二分类问题上表现出色。例如,在金融领域可以用于信用评分;在医疗诊断方面可用于疾病检测;另外还常见于图像处理任务如人脸识别等领域。由于其灵活性高且易于扩展至多类别的场景下工作,因此具有广泛的适用范围。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值