《AdaBoost:从弱分类器到强模型的进化之路》

目录

1. AdaBoost 的核心思想

2. AdaBoost 的关键步骤

步骤 1:初始化样本权重

步骤 2:迭代训练弱分类器

步骤 3:组合弱分类器

3. 用例子详解 AdaBoost

数据集:

迭代过程:

第1轮(t=1):

第2轮(t=2):

第3轮(t=3):

最终强分类器:

4. AdaBoost 的优缺点

优点:

缺点:

5. Python 实现(基于 Scikit-learn)

6. 总结


1. AdaBoost 的核心思想

一句话总结

“知错能改,逐步提升”
AdaBoost 是一种串行集成学习算法,通过迭代训练多个弱分类器(如决策树桩),每次重点关注前一个分类器分错的样本,最终将所有弱分类器组合成一个强分类器。


2. AdaBoost 的关键步骤

步骤 1:初始化样本权重
  • 初始权重:每个样本的权重相同,总和为1。
    例如:如果有10个样本,初始权重均为 0.1
步骤 2:迭代训练弱分类器

在每次迭代中:

  1. 训练弱分类器:基于当前权重分布,找到一个分类误差最小的弱分类器(如决策树桩)。
  2. 计算分类误差率


    其中 (D_t(i)) 是第 (t) 轮样本 (i) 的权重,II 是指示函数(分类错误时为1)。
  3. 计算弱分类器的权重


    误差率越低的分类器,权重 αt 越大。
  4. 更新样本权重

    • 分类错误的样本权重会被放大,分类正确的权重会被缩小。
    • (Z_t) 是归一化因子,确保权重总和为1。
步骤 3:组合弱分类器

最终强分类器为:
 


即所有弱分类器的加权投票结果。


3. 用例子详解 AdaBoost

数据集

序号

1

2

3

4

5

6

7

8

9

10

x

0

1

2

3

4

5

6

7

8

9

y

+1

+1

+1

-1

-1

-1

+1

+1

+1

-1

目标:通过 AdaBoost 组合多个决策树桩(仅分裂一次的决策树)。


迭代过程
第1轮(t=1)
  1. 初始权重:所有样本权重均为 0.1
  2. 训练弱分类器:选择分裂点 x ≤ 2.5,将数据分为两类:
    • 左侧(x ≤ 2.5)预测为 +1,右侧预测为 -1
  1. 计算误差率
    • 分错的样本是序号7、8、9(真实标签为 +1,但被预测为 -1),误差率:

  1. 计算分类器权重

  2. 更新权重

  • 分错的样本权重放大,分对的缩小。新权重分布 (D_2) 如下:

序号

1

2

3

4

5

6

7

8

9

10

D2

0.071

0.071

0.071

0.071

0.071

0.071

0.167

0.167

0.167

0.071


第2轮(t=2)
  1. 训练弱分类器:选择分裂点 x ≤ 8.5,将数据分为两类:
    • 左侧(x ≤ 8.5)预测为 +1,右侧预测为 -1
  1. 计算误差率
    • 分错的样本是序号4、5、6(真实标签为 -1,但被预测为 +1),误差率:

  1. 计算分类器权重

  2. 更新权重

序号

1

2

3

4

5

6

7

8

9

10

D3

0.045

0.045

0.045

0.167

0.167

0.167

0.106

0.106

0.106

0.045

    • 分错的样本权重放大,新权重分布 (D_3) 如下:

第3轮(t=3)
  1. 训练弱分类器:选择分裂点 x > 5.5,将数据分为两类:
    • 右侧(x > 5.5)预测为 +1,左侧预测为 -1
  1. 计算误差率
    • 分错的样本是序号10(真实标签为 -1,但被预测为 +1),误差率:

  1. 计算分类器权重

  2. 更新权重
    • 最终所有样本被正确分类,训练结束。

最终强分类器


通过加权投票,最终分类器可以正确分类所有样本。


4. AdaBoost 的优缺点

优点
  • 高精度:通过逐步优化,最终模型的泛化能力很强。
  • 自动关注难样本:分错的样本会被赋予更高权重,后续模型重点学习。
  • 简单高效:基分类器通常为决策树桩,计算速度快。
缺点
  • 对噪声敏感:异常值可能被过度关注,导致过拟合。
  • 需调整参数:如迭代次数(n_estimators)和学习率(learning_rate)。

5. Python 实现(基于 Scikit-learn)

from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split# 生成模拟数据
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# AdaBoost 模型(使用决策树桩作为基分类器)
model = AdaBoostClassifier(base_estimator=DecisionTreeClassifier(max_depth=1),  # 弱分类器n_estimators=50,      # 迭代次数learning_rate=1.0,    # 学习率(控制每个分类器的权重缩放)random_state=42
)# 训练与预测
model.fit(X_train, y_train)
print("测试集准确率:", model.score(X_test, y_test))

6. 总结

  • 核心思想:通过迭代调整样本权重,让模型逐步关注难分类的样本。
  • 关键公式:误差率 (e_t)、分类器权重 (\alpha_t)、权重更新公式。
  • 应用场景:分类问题(如文本分类、图像识别),尤其适合数据分布不均衡的情况。

7. 通俗比喻:班级考试

  • 第1次考试 :所有学生权重相同,老师根据错误重点讲解。
  • 第2次考试 :之前错题权重增加,学生更关注这些题。
  • 最终成绩 :多次考试成绩加权平均,最终得分更准确。

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

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

相关文章

Android Settings 有线网设置界面优化

Android Settings 有线网设置界面优化 文章目录 Android Settings 有线网设置界面优化一、前言二、简单修改1、修改的EthernetSettings代码:2、有线网ip获取代码:3、AndroidManifest.xml定义有线网的Activity4、修改后界面: 三、其他1、有线网…

基于web的生产过程执行管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着世界经济信息化、全球化的到来和电子商务的飞速发展,推动了很多行业的改革。若想达到安全,快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、畅通、高效的线上管理系统。当前的生产过程执行管理存在管理效率…

XSS 攻击风险与防御实践

✅ 框架与 XSS 防护概况 框架是否默认转义高危场景建议防御措施React✅ 是使用 dangerouslySetInnerHTML避免使用,必要时做内容清洗Vue.js✅ 是使用 v-html避免使用,或使用 DOMPurify 清洗Angular✅ 是使用 innerHTML、bypassSecurityTrustHtml谨慎绕过…

Cesium 时间线 及 坐标转换

文章目录 Cesium 基础理解(二)TimeLine & Clock 应用场景核心代码实例及解释代码解释 Cesium 之 实体动画构建实体动画的技巧1. 利用时间属性2. 组合动画效果3. 使用动画曲线 优化点1. 减少属性更新频率2. 优化实体数量3. 合理使用材质和纹理 注意事…

ngx_regex_init

定义在 src\core\ngx_regex.c void ngx_regex_init(void) { #if !(NGX_PCRE2)pcre_malloc ngx_regex_malloc;pcre_free ngx_regex_free; #endif } NGX_PCRE21 #if !(NGX_PCRE2) 就为假 条件不成立 ngx_regex_init 函数就成了空实现 NGX_PCRE2 被定义,则表示 Ngin…

第二期:深入理解 Spring Web MVC [特殊字符](核心注解 + 进阶开发)

前言: 欢迎来到 Spring Web MVC 深入学习 的第二期!在第一期中,我们介绍了 Spring Web MVC 的基础知识,学习了如何 搭建开发环境、配置 Spring MVC、编写第一个应用,并初步了解了 控制器、视图解析、请求处理流程 等核…

一文读懂数据仓库:从概念到技术落地

数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。以下是关于数据仓库的详细介绍: 一、特点 面向主题:数据仓库围绕特定主题组织数据,如客户、产品、销售等,而不是像传统数…

JavaScript学习18-css操作和事件处理程序(html/DOM0/DOM2)

一、css操作 第一种:容易出错 第二种:有效避免错误 第三种: 二、事件处理程序 1.HTML事件 2.DOM0级事件处理 3.DOM2级事件处理

npm设置代理和取消代理

设置代理 具体代理端口要根据自己的来 npm config set proxy http://127.0.0.1:7890 npm config set https-proxy http://127.0.0.1:7890取消代理 npm config delete proxy npm config delete https-proxy查看代理 npm config get proxy # 应返回 null npm config get…

从零开始训练Codebook:基于ViT的图像重建实践

完整代码在文末,可以一键运行。 1. 核心原理 Codebook是一种离散表征学习方法,其核心思想是将连续特征空间映射到离散的码本空间。我们的实现方案包含三个关键组件: 1.1 ViT编码器 class ViTEncoder(nn.Module):def __init__(self, codebo…

大数据笔试题_第一阶段配套笔试题02

已知一个字符类型的日期:2022-01-20,请用SQL显示出此日期对应的下个月的月份,结果要求为Number类型(202201)。 参考答案 sql SELECT to_date(2022-01-20, yyyy-mm-dd) a1,add_months(to_date(2022-01-20, yyyy-mm-d…

C++实现对象单例模式

在 C 中实现单例模式有多种方法,以下是线程安全的现代 C 实现方式(推荐 C11 及以上版本): 1. Meyers’ Singleton(推荐) class Singleton { public:// 删除拷贝构造和赋值运算符Singleton(const Singleto…

企业常用Linux服务搭建

1.需要两台centos 7服务器,一台部署DNS服务器,另一台部署ftp和Samba服务器。 2. 部署DNS 服务器​ #!/bin/bash# 更新系统 echo "更新系统..." sudo yum update -y# 安装 BIND 和相关工具 echo "安装 BIND 和相关工具..." sudo y…

UE5Actor模块源码深度剖析:从核心架构到实践应用

UE5 Actor模块源码深度剖析:从核心架构到实践应用 a. UE5 Actor模块架构概述 在UE5引擎中,Actor扮演着至关重要的角色,它是整个游戏世界中各类可交互对象的基础抽象。从本质上来说,所有能够被放置到关卡中的对象都属于Actor的范畴,像摄像机、静态网格体以及玩家起始位置…

DreamDiffusion代码学习及复现

论文解读在这里 File path | Description /pretrains ┣ 📂 models ┃ ┗ 📜 config.yaml ┃ ┗ 📜 v1-5-pruned.ckpt┣ 📂 generation ┃ ┗ 📜 checkpoint_best.pth ┣ 📂 eeg_pretain ┃ ┗ …

用Python实现TCP代理

依旧是Python黑帽子这本书 先附上代码,我在原书代码上加了注释,更好理解 import sys import socket import threading#生成可打印字符映射 HEX_FILTER.join([(len(repr(chr(i)))3) and chr(i) or . for i in range(256)])#接收bytes或string类型的输入…

Pyinstaller 打包flask_socketio为exe程序后出现:ValueError: Invalid async_mode specified

Pyinstaller 打包flask_socketio为exe程序后出现&#xff1a;ValueError: Invalid async_mode specified 一、详细描述问题描述 Traceback (most recent call last): File "app_3.py", line 22, in <module> File "flask_socketio\__init__.py"…

django REST framework(DRF)教程

Django DRF API Django 基本使用Django DRF序列化器Django DRF视图Django DRF常用功能Django 基本使用 前后端分离开发模式认识RestFulAPI回顾Django开发模式Django REST Framework初探前后端分离开发模式 前后端分离前:前端页面看到的效果都是由后端控制,即后端渲染HTML页面…

【Linux】Orin NX + Ubuntu22.04配置国内源

1、获取源 清华源 arm 系统的源,可以在如下地址获取到 https://mirror.tuna.tsinghua.edu.cn/help/ubuntu-ports/ 选择HTTPS,否则可能报错: 明文签署文件不可用,结果为‘NOSPLIT’(您的网络需要认证吗?)查看Orin NX系统版本 选择jammy的源 2、更新源 1)备份原配…

【含文档+PPT+源码】基于微信小程序的社交摄影约拍平台的设计与实现

项目介绍 本课程演示的是一款基于微信小程序的社交摄影约拍平台的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系…