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

news2024/9/21 20:48:00

AdaBoost

  • 1、引言
  • 2、AdaBoost
    • 2.1 定义
    • 2.2 优缺点
      • 2.2.1 优点
      • 2.2.2 缺点
    • 2.3 实现方式
    • 2.4 算法公式
    • 2.5 代码示例
  • 3、总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1645889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[激光原理与应用-92]:振镜的光路图原理

目录 一、振镜的光路 二、振镜的工作原理 2.1 概述 2.2 焊接头 2.3 准直聚焦头-直吹头 2.4 准直聚焦头分类——按应用分 2.4.1 准直聚焦头分类——功能分类 2.4.2 准直聚焦头镜片 2.4.3 振镜焊接头 2.4.4 振镜分类: 2.4.5 动态聚焦系统演示(素…

代码随想录第51天 | 309.最佳买卖股票时机含冷冻期

309.最佳买卖股票时机含冷冻期 309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 代码随想录 (programmercarl.com) 动态规划来决定最佳时机,这次有冷冻期!| LeetCode:309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bi…

开发环境待

一 web开发环境搭建 1 web开发环境概述 所谓web开发,指的就是从网页中向后端程序发送请求.与后端程序进行交互. 流程图: 1,Web服务器是指驻留于因特网上某种类型计算机的程序. 2, 可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界 浏览…

自定义类型②③——联合体和枚举

自定义类型②③——联合体和枚举 1.联合体1.1 联合体类型的声明1.2 联合体的特点1.3 相同成员结构体和联合体的对比1.4 联合体大小的计算1.5 联合体的应用①1.5 联合体的应用② 2. 枚举2.1 枚举类型的声明2.2 枚举类型的特点2.3 枚举的优点 1.联合体 1.1 联合体类型的声明 关…

Whisper、Voice Engine推出后,训练语音大模型的高质量数据去哪里找?

近期,OpenAI 在语音领域又带给我们惊喜,通过文本输入以及一段 15 秒的音频示例,可以生成既自然又与原声极为接近的语音。值得注意的是,即使是小模型,只需一个 15 秒的样本,也能创造出富有情感且逼真的声音。…

【字符串】Leetcode 二进制求和

题目讲解 67. 二进制求和 算法讲解 为了方便计算,我们将两个字符串的长度弄成一样的,在短的字符串前面添加字符0;我们从后往前计算,当遇到当前计算出来的字符是> 2’的,那么就需要往前面进位和求余 注意&#xf…

腾讯崛起!2024年最赚钱的电商平台,竟然来自视频号

大家好,我是电商月月 说到卖货平台,这两年“抖音”绝对是所有人心里最赚钱的电商平台 抖音小店的商家利用抖店后台的“精选联盟”引流,不用自己直播,也能靠直播卖货赚的盆满钵满 于是好多平台都效仿抖店的直播卖货形式来获取更…

《自动机理论、语言和计算导论》阅读笔记:p428-p525

《自动机理论、语言和计算导论》学习第 14 天,p428-p525总结,总计 98 页。 一、技术总结 1.Kruskal’s algorithm(克鲁斯克尔算法) 2.NP-Complete Problems p434, We say L is NP-complete if the following statements are true about L: (1)L is …

电机控制器电路板布局布线参考指导(七)电流检测模块布局布线

电机控制器电路板布局布线参考指导(七)电流检测模块布局布线 1.高侧电流检测2.低侧电流监测3.两相和三相电流检测4.关键元器件选型要求5.布局6.布线7.工具设置8.输入和输出滤波9.注意事项 很多电机驱动器产品系列包括内置了电流感测功能的器件&#xff0…

ArthasGC日志GCeasy详解

Arthas详解 Arthas是阿里巴巴在2018年9月开源的Java诊断工具,支持JDK6,采用命令行交互模式,可以方便定位和诊断线上程序运行问题.Arthas官方文档十分详细.详见:官方文档 Arthas使用场景 Arthas使用 # github下载arthas wget https://alibaba.github.io/arthas/arthas-boot.j…

OpenHarmony实战开发-如何使用Web组件加载页面

页面加载是Web组件的基本功能。根据页面加载数据来源可以分为三种常用场景,包括加载网络页面、加载本地页面、加载HTML格式的富文本数据。 页面加载过程中,若涉及网络资源获取,需要配置ohos.permission.INTERNET网络访问权限。 加载网络页面…

计算机组成结构—高速缓冲存储器(Cache)

目录 一、Cache的基本工作原理 1.Cache工作原理 2.命中率 3.Cache的基本结构 4.Cache的改进 二、Cache和主存之间的映射方式 1.直接映射 2.全相联映射 3.组相联映射 三、Cache中主存块的替换算法 四、Cache的写策略 概为了解决 CPU 和主存之间速度不匹配的问题&#x…

(读书笔记-大模型) LLM Powered Autonomous Agents

目录 智能体系统的概念 规划组件 记忆组件 工具组件 案例研究 智能体系统的概念 在大语言模型(LLM)赋能的自主智能体系统中,LLM 充当了智能体的大脑,其三个关键组件分别如下: 首先是规划,它又分为以下…

成语:势如破竹、迎刃而解;明以前唯一同时入选文庙、武庙的牛人

千古流芳、身后能够进入文庙或武庙,是古人最高的荣誉,也是读书人和武将终极的追求,所谓的青史留名,享受万代祭祀、千秋敬仰,甚至都可以称之为圣人,但历史上,却有两人文武兼备、同时入选了文庙与…

RESTFul风格设计和实战

四、RESTFul风格设计和实战 4.1 RESTFul风格概述 4.1.1 RESTFul风格简介 RESTful(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序和服务之间的通信。它是一种基于标准 HTTP 方法的简单和轻量级的通信协议&#x…

多目标转化依赖DBMTL与AIT区别

DBMTL:通过前序目标输出作为后序目标输入刻画概率转移关系,概率关系的刻画是通过MLP来刻画的;目标之间如果存在内在联系,稀疏目标能利用非稀疏目标中的信息,得到特殊收益; DBMTL与ESMM区别:直接…

Socket学习记录

本次学习Socket的编程开发,该技术在一些通讯软件,比如说微信,QQ等有广泛应用。 网络结构 这些都是计算机网络中的内容,我们在这里简单回顾一下: UDP(User Datagram Protocol):用户数据报协议;TCP(Transmission Contr…

04-18 周四 为LLM_inference项目配置GitHub CI过程记录

04-18 周四 为LLM_inference项目配置GitHub CI过程记录 时间版本修改人描述2024年4月18日10:30:13V0.1宋全恒新建文档 简介和相关文档 04-15 周一 GitHub仓库CI服务器配置过程文档actions-runner 是托管与GitHub上的仓库,下载最新的客户端程序即可。self hosted r…

spring高级篇(十)

1、内嵌tomcat boot框架是默认内嵌tomcat的,不需要手动安装和配置外部的 Servlet 容器。 简单的介绍一下tomcat服务器的构成: Catalina: Catalina 是 Tomcat 的核心组件,负责处理 HTTP 请求、响应以及管理 Servlet 生命周期。它包…

考研数学|基础跟张宇,强化直接1000题还是先做660?

跟宇哥用1000题的,我愿称之为卷王之王!660对基础阶段是绝佳的查漏补缺,必做! 自我介绍一下:我21年一战数学83,总分没过线,22年二战143,逆袭上岸211!660是我的心头好&…