【机器学习】必会算法之:AdaBoost

1、引言

小屌丝:鱼哥, 这五一要去哪里浪啊?
小鱼:哪也不去?
小屌丝:???? 这指定有情况,
小鱼:有你个锤子啊~
小屌丝:那咋能不出去浪?
小鱼:因为 只放一天假。
小屌丝:… 也不错,省钱了。
小鱼:我… 很好。
在这里插入图片描述

小屌丝:遇到问题,总的换个思考方式,你说对不,鱼哥。
小鱼:啊,对对对对对。
小屌丝: 这么认可我说的话,那给我讲一讲AdaBoost呗。
小鱼:我擦,你这…
在这里插入图片描述

小屌丝:狗就狗吧,只要能学会AdaBoost就行
小鱼:…

2、AdaBoost

2.1 定义

AdaBoost(Adaptive Boosting)是一种迭代算法,其核心思想是通过改变数据分布来多次训练不同的弱分类器,然后将这些弱分类器进行线性组合,构成一个强分类器。

AdaBoost算法是Boosting系列算法中最具代表性的一种,它通过不断地自适应调整样本权重和分类器权重,最终得到一个性能优秀的分类器。

2.2 优缺点

2.2.1 优点

AdaBoost算法的优点包括:

  • 高准确率:通过集成多个弱分类器,AdaBoost通常能够显著提高分类准确率。
  • 鲁棒性:对噪声数据和异常值具有一定的鲁棒性。
  • 易实现:算法实现相对简单,且易于理解和应用。

2.2.2 缺点

AdaBoost算法缺点包括:

  • 对弱分类器敏感:AdaBoost的性能高度依赖于所选择的弱分类器。如果弱分类器的性能过差,那么集成后的强分类器也可能表现不佳。
  • 可能过拟合:由于AdaBoost在迭代过程中会不断关注被错误分类的样本,这可能导致算法对训练数据过拟合,从而在测试数据上表现不佳。
    -计算成本高:AdaBoost需要训练多个弱分类器,并计算每个弱分类器的权重,因此计算成本相对较高。

2.3 实现方式

AdaBoost算法的实现主要包括以下几个步骤:

  • 数据准备:准备训练数据和标签。
  • 初始化权重:为每个训练样本分配初始权重。
  • 迭代训练:在每次迭代中,根据当前权重分布训练一个弱分类器,并计算其错误率。
  • 调整权重:根据弱分类器的错误率调整样本的权重,使得被错误分类的样本在下一轮迭代中获得更大的权重。
  • 组合分类器:将当前弱分类器添加到分类器集合中,并根据其错误率为其分配一个权重。
  • 输出结果:将所有弱分类器的结果按照其权重进行加权投票,得到最终的分类结果。

2.4 算法公式

AdaBoost算法中的关键公式包括:

  • 弱分类器的错误率 [ ϵ = ∑ i = 1 N w i ⋅ I ( y i ≠ h ( x i ) ) ∑ i = 1 N w i ] [ \epsilon = \frac{\sum_{i=1}^{N} w_i \cdot I(y_i \neq h(x_i))}{\sum_{i=1}^{N} w_i} ] [ϵ=i=1Nwii=1NwiI(yi=h(xi))]
  • 弱分类器的权重 [ α = 1 2 ln ⁡ ( 1 − ϵ ϵ ) ] [ \alpha = \frac{1}{2} \ln \left( \frac{1-\epsilon}{\epsilon} \right) ] [α=21ln(ϵ1ϵ)]
  • 更新权重 [ w i , new = w i ⋅ exp ⁡ ( α ⋅ I ( y i ≠ h ( x i ) ) ) ] [ w_{i,\text{new}} = w_i \cdot \exp(\alpha \cdot I(y_i \neq h(x_i))) ] [wi,new=wiexp(αI(yi=h(xi)))]

其中, ( w i ) (w_i) (wi)是第 ( i ) (i) (i)个样本的权重, ( y i ) (y_i) (yi)是实际标签, ( h ( x i ) ) (h(x_i)) (h(xi))是弱分类器的预测标签, ( I ) (I) (I)是指示函数。

2.5 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-05-01
# @Author : Carl_DJ


import numpy as np  
  
''' 
假设train_weak_classifier是一个可以训练弱分类器的函数,它接受特征矩阵X、标签y和样本权重D  
 它返回一个弱分类器clf和该分类器在训练集上的错误率error_rate  
'''
def train_weak_classifier(X, y, D):  
    clf = None  # 假设这里返回一个训练好的弱分类器  
    error_rate = 0  # 假设这里计算并返回弱分类器的错误率  
    return clf, error_rate  
  
# 假设predict是弱分类器的预测函数,它接受特征矩阵X并返回预测结果  
def predict(clf, X):  
    # 这里是伪代码,表示使用弱分类器clf对特征矩阵X进行预测  
    # 返回预测结果,通常是类别标签的数组  
    y_pred = None  # 假设这里返回预测结果  
    return y_pred  
  
# AdaBoost算法伪代码  
def AdaBoost(X, y, num_iter=10):  
    n_samples, n_features = X.shape  
    # 初始化样本权重为均匀分布  
    D = np.full(n_samples, (1 / n_samples))  
    classifier_list = []  # 存储弱分类器  
    classifier_weight = []  # 存储弱分类器的权重  
  
    for _ in range(num_iter):  
        # 使用当前样本权重D训练弱分类器  
        clf, error_rate = train_weak_classifier(X, y, D)  
          
        # 如果错误率为0,则跳过后续步骤(避免除以0)  
        if error_rate == 0:  
            break  
  
        # 计算弱分类器的权重  
        alpha = 0.5 * np.log((1 - error_rate) / error_rate)  
        classifier_weight.append(alpha)  
        classifier_list.append(clf)  
  
        # 更新样本权重  
        y_pred = predict(clf, X)  
        # 计算分类器预测错误的样本的指数权重  
        exp_weights = np.exp(-alpha * y * y_pred)  
        # 规范化权重,使它们成为新的概率分布  
        D = (D * exp_weights) / np.sum(D * exp_weights)  
  
    # 构造强分类器  
    def strong_classifier(x):  
        scores = 0  
        for clf, weight in zip(classifier_list, classifier_weight):  
            scores += weight * predict(clf, np.array([x]))[0]  # 假设predict返回的是一维数组  
        return np.sign(scores)  
  
    return strong_classifier  
  



在这里插入图片描述

3、总结

AdaBoost是一种有效的集成学习算法,它通过组合多个弱分类器来提高整体的分类性能。

其主要优点是简单、易于实现,且对弱分类器的类型没有严格要求

然而,AdaBoost对噪声数据和异常值比较敏感,因此在处理包含噪声的数据时需要谨慎。

尽管如此,AdaBoost仍然是机器学习领域中一种非常重要且广泛使用的算法。

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼,学习【机器学习】&【深度学习】领域的知识。

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Carl_奕然

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

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

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

打赏作者

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

抵扣说明:

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

余额充值