前人栽树,后人乘凉——AdaBoost

article/2025/8/22 23:49:13

一、AdaBoost介绍

AdaBoost的全称是ADAPTIVE BOOSTING(自适应增强算法),是一种经典的集成学习算法,它通过组合多个弱学习器来构建一个强学习器。

从表意上看,AdaBoost就是在不断对于错误的知识点进行加深印象,其加深印象的方式则是通过每一轮中根据前一轮的表现对训练样本的权重进行调整,使得后续的弱学习器更加关注之前分类错误的样本,最终将这些弱学习器组合起来形成一个强学习器来实现的。​

相关定义

弱学习器:通常是简单的模型,如单层决策树(决策树桩)。

强学习器:通过加权组合多个弱学习器得到的最终模型。

二、具体实现步骤

现在以选择弱学习器为决策树:学习方式实现如下:

1. 初始化样本权重

在训练开始时,AdaBoost会为每个样本分配一个初始权重。假设训练集中有 N 个样本,那么每个样本的初始权重为:

这些权重表示每个样本在训练过程中的“重要性”,初始时所有样本的重要性是相同的。

2. 训练弱学习器

AdaBoost会依次训练多个弱学习器。在每一轮训练中,它会根据当前的样本权重来训练一个弱学习器。弱学习器的目标是根据当前的权重分布找到一个能够较好区分样本的模型。

3. 计算弱学习器的错误率

在训练完一个弱学习器后,AdaBoost会计算该弱学习器在当前样本权重分布下的错误率 :​

 含义为:当预测值与真实标签相等,指示函数输出结果为1(否则为0),此时权重越高惩罚就会越大

4. 更新样本权重

根据弱学习器的错误率,AdaBoost会更新样本权重。对于第 t 轮训练后的样本权重更新公式为:

其中:

 y·h(x)表示真实标签与弱机器学习预测标签的乘积,若预测正确则为1,预测错误则是-1

5. 归一化样本权重

更新后的样本权重需要进行归一化,以确保所有样本权重之和为 1:

 6. 重复训练和更新

AdaBoost会重复上述步骤,训练多个弱学习器,并逐步调整样本权重。随着训练的进行,那些被弱学习器错误分类的样本权重会不断增加,从而在后续的训练中受到更多的关注。

三、实例应用

1.导入必要的库

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score, classification_report

解析:

• `numpy`和`pandas`用于数据处理。

• `load_iris`用于加载鸢尾花数据集。

• `train_test_split`用于将数据集划分为训练集和测试集。

• `DecisionTreeClassifier`是我们选择的弱学习器。

• `AdaBoostClassifier`是AdaBoost算法的实现。

• `accuracy_score`和`classification_report`用于评估模型性能。


2.加载数据集

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data  # 特征数据
y = iris.target  # 标签数据# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

解析:

• `load_iris()`加载鸢尾花数据集,返回一个包含特征和标签的Bunch对象。

• `X`是特征数据,`y`是标签数据。

• `train_test_split`将数据集划分为训练集和测试集,其中测试集占30%。`random_state=42`确保每次划分结果一致。


3.定义弱学习器和AdaBoost模型

# 定义弱学习器
base_estimator = DecisionTreeClassifier(max_depth=1)# 使用兼容所有版本的参数名
adaboost = AdaBoostClassifier(estimator=base_estimator, n_estimators=50,random_state=42
)

解析:

• `DecisionTreeClassifier(max_depth=1)`定义了一个深度为1的决策树作为弱学习器。这种决策树也称为决策树桩,是AdaBoost中常用的弱学习器。

• `AdaBoostClassifier`是AdaBoost算法的实现。`base_estimator`指定了弱学习器,`n_estimators=50`表示训练50个弱学习器,`random_state=42`确保每次训练结果一致。


4.训练模型

# 训练AdaBoost模型
adaboost.fit(X_train, y_train)

解析:

• `adaboost.fit(X_train, y_train)`使用训练集数据训练AdaBoost模型。在训练过程中,AdaBoost会逐步调整样本权重,并训练多个弱学习器。


5.预测和评估

# 在测试集上进行预测
y_pred = adaboost.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.4f}")# 打印分类报告
print("Classification Report:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

解析:

• `adaboost.predict(X_test)`使用训练好的模型对测试集进行预测。

• `accuracy_score(y_test, y_pred)`计算模型的准确率。

• `classification_report(y_test, y_pred, target_names=iris.target_names)`打印详细的分类报告,包括每个类别的精确率、召回率和F1分数。

四、模型评价

优点

​​1. 自动关注少数类样本​:

​AdaBoost通过增加错误分类样本的权重,使得模型在后续迭代中更加关注这些样本。在类别不平衡的情况下,少数类样本往往更容易被错误分类,因此它们的权重会逐渐增加。​这种机制可以帮助模型更好地学习少数类样本的特征,从而提高对少数类的分类性能,笔者在进行打板风控预测时,选择这个模型简单尝试了一下,因为打板就属于一种比较少见的情况,且数据正样本过少SMOTE等方法数据增强也有难度,但仅仅只是把随机森林换成AdaBoost这一举动就令回测时的收益率提升了将近百分之十。

​2. 动态调整权重​:

​AdaBoost的权重调整机制是动态的,它会根据每轮弱学习器的预测结果实时调整样本权重。这意味着即使少数类样本在初始阶段被错误分类,后续的弱学习器也会逐渐关注它们。​这种动态调整能力使得AdaBoost在处理类别不平衡问题时具有一定的适应性。​

3. 集成学习的优势​:

​AdaBoost通过组合多个弱学习器来构建强学习器,每个弱学习器都有机会对少数类样本进行优化。这种集成学习的方式可以有效提高对少数类的分类能力。

​缺点

​​1. 少数类样本权重过高可能导致过拟合​:

​在类别不平衡的情况下,少数类样本的权重可能会迅速增加,尤其是在它们被频繁错误分类时。这可能导致模型过度关注少数类样本,而忽视了多数类样本。​这种情况可能会导致模型在少数类样本上表现良好,但在多数类样本上表现较差,从而降低整体的泛化能力。

​2. 训练过程可能不稳定​:

​由于少数类样本的权重增加,模型可能会在后续迭代中过度调整以适应这些样本。这可能导致训练过程不稳定,甚至出现权重波动较大的情况。​这种不稳定性可能会影响模型的收敛速度和最终性能。​

3. 对噪声敏感​:

​少数类样本由于数量较少,更容易受到噪声的影响。如果少数类样本中存在噪声(即错误标注的样本),AdaBoost可能会过度关注这些噪声样本,从而导致模型性能下降。


http://www.hkcw.cn/article/maOACydfPI.shtml

相关文章

【深度学习:进阶篇】--2.3.深度学习正则化

学习目标 目标 了解偏差与方差的意义知道L2正则化与L1正则化的数学意义知道Droupout正则化的方法了解早停止法、数据增强法的其它正则化方式 应用 无 目录 学习目标 1 偏差与方差 1.1 数据集划分 1.2 偏差与方差 1.3 解决方法(过拟合) 2 正则化(…

解决报错error: ‘void_t’ is not a member of ‘std’

解决报错error: ‘void_t’ is not a member of ‘std’ 博主是在编译ceres库时遇到的此报错。 解决方式很简单,将编译使用的c标准设定为c17即可。 例如,在VS2022中,右键单击项目-属性:

【达梦数据库】会话sp_close关闭不掉

背景 一个纯查询的语句,执行了很久,sp_close关闭不掉 排查方法 1、会话sp_close关闭不掉,sp_cance后再执行sp_close依旧关闭不了; sp_close_session(sess_id)sp_cancel_session_operation(sess_id)2、通过分析事务视图v$trx的…

澳门向永久居民每人发1万澳门元 新计划细节公布

澳门特区行政会今日完成讨论《2025年度现金分享计划》行政法规草案。该法规对2025年度的现金分享发放资格及申请手续进行了规范。根据规定,符合身份条件和在澳条件的居民可获得现金分享,其中永久性居民每人一万澳门元,非永久性居民每人六千澳门元。身份条件是指在2024年12月…

接口测试之文件上传(全)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 在日常工作中,经常有上传文件功能的测试场景,因此,本文介绍两种主流编写上传文件接口测试脚本的方法。 首先,要知道…

数十家超市曝出食品安全问题 供应链隐患凸显

近日,全国多地超市接连曝出食品安全问题,涉及蔬菜、肉类、包装食品等多个品类。永辉、麦德龙、山姆会员店、小象超市、盒马、中百、朴朴、沃尔玛、奥乐齐和大润发等多家超市被点名。在12315、黑猫和消费保等投诉平台上,可以看到山姆永辉等超市因食品安全问题遭到消费者投诉。…

canvas 实现全屏倾斜重复水印

​ 参考&#xff1a; html、js、canvas实现水印_html页面使用canvas绘制重复水印-CSDN博客 效果 ​​​​ 不求水印显示完全。 实现代码 <template><div class"watermark" ref"waterMark"></div></template><script lang&q…

Android Studio 2022.2.1.20 汉化教程

查看Android Studio 版本 Android Studio Flamingo | 2022.2.1 Patch 2 下载&#xff1a;https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack----/versions/stable

一根开价10万 年轻人迷上文玩玉米,风靡年轻圈

一根开价10万年轻人迷上文玩玉米。“文玩玉米风靡年轻圈,单根标价10万仍抢手!特殊培育的琥珀纹路、蜜蜡颗粒,经直播带货引爆市场,产业链从云南育种到百倍溢价,争议中见证新消费魔力。”文玩,这个曾被贴上“中老年专属”标签的传统爱好,如今正以意想不到的方式在年轻人中…

如何在Qt中绘制一个带有动画的弧形进度条?

如何在Qt中绘制一个弧形的进度条 在图形用户界面开发中&#xff0c;进度指示控件&#xff08;Progress Widget&#xff09;是非常常见且实用的组件。CCArcProgressWidget 是一个继承自 QWidget 的自定义控件&#xff0c;用于绘制圆弧形进度条。当然&#xff0c;笔者看了眼公开…

体育平台数据服务解决方案:从痛点到落地的全栈技术支持

一、体育平台开发的数据痛点解析 在体育平台开发领域&#xff0c;数据层建设往往成为技术团队的核心挑战&#xff1a; 实时数据获取难自建实时数据采集系统需解决赛事方反爬机制、多源数据同步&#xff08;如比分 / 球员位置 / 赔率&#xff09;、毫秒级延迟控制等问题&#…

去寺庙减脂的人胖了11斤 素食诱惑难抵挡

去寺庙减脂的人胖了11斤!一群原本希望通过吃减脂餐修身养性的打工人和中年人,在体验后第一批人竟胖了11斤,这反转实在惊人。当下生活节奏飞快,很多人被亚健康困扰,身体各种不适。于是大家开始注重养生,寺庙因宁静祥和且素食养生概念深入人心,被不少人视为减脂圣地。人们…

printf 输出格式总结(C语言)和C 中的类型提升规则、默认整型提升

类型格式符示例输出说明十进制整数%d12345输出有符号十进制&#xff08;int 类型&#xff09;十进制整数%u12345输出无符号十进制&#xff08;unsigned int&#xff09;十六进制%x3fa2小写十六进制&#xff08;无前缀&#xff09;十六进制%X3FA2大写十六进制&#xff08;无前缀…

Flutter下的一点实践

目录 1、背景2、refena创世纪代码3、localsend里refena的刷新3.1 初始状态3.2 发起设备扫描流程3.3 扫描过程3.3 刷新界面 4.localsend的设备扫描流程4.1 UDP广播设备注册流程4.2 TCP/HTTP设备注册流程4.3 localsend的服务器初始化工作4.4总结 1、背景 在很久以前&#xff0c;…

英国利物浦汽车冲撞人群事件嫌疑人身份公布

英国利物浦汽车冲撞人群事件嫌疑人身份公布 警方通报调查进展英国默西赛德郡警方发言人当地时间5月29日说,日前在利物浦市中心驾车冲撞球迷的男子面临7项指控,将于30日在利物浦地方法院出庭。据英国媒体报道,默西-柴郡地区皇家检察署授权默西赛德郡警方正式对53岁的嫌疑人保…

「动态规划::状压DP」网格图递推 / AcWing 292|327(C++)

目录 概述 相邻行递推 思路 算法过程 优化方案 空间优化 返回值优化 Code 复杂度 相邻两行递推 思路 算法过程 Code 复杂度 特殊优化&#xff1a;编译期计算 总结 概述 如果我们有一张地图&#xff0c;要求是在符合某类条件的前提在地图上放置最优解&#xff…

深圳海关查获超18公斤摇头丸 科技助力精准打击

近日,深圳邮局海关在跨境转运货物的监管过程中查获了一批伪报为“有机蜡溶香草”的包裹,实际上是摇头丸,总重量达18433.3克。目前,该案件已正式移交至海关缉私部门,进行更深入的调查和追溯。事件起因是海关关员对一批申报品名为“有机蜡溶香草”的转运货物进行例行检查时,…

一根网线连接两台电脑组建局域网

用一根网线分别插在网络端口&#xff0c;修改网络IP地址&#xff0c;假如有A和B&#xff0c;设置A:IP地址192.168.1.1,B&#xff1a;192.168.1.2 接着把网络防火墙关闭&#xff0c;步骤如下&#xff1a; 后面接着右键点击我的电脑&#xff0c;选择属性&#xff0c;打开远程控制…

丰巢回应快递柜消失市民取件扑空!

丰巢回应快递柜消失市民取件扑空。5月27日,上海普陀。市民发帖称包裹被存放在丰巢快递柜,过去取件时快递柜却消失不见了。5月29日,该包裹快递员告诉《正在新闻》,昨天在该小区的66号楼快递柜发生同样事件。对于快递柜搬走的原因,他表示不清楚,快递柜管理人员并没有告知他…

树型表查询方法 —— SQL递归

目录 引言&#xff1a; 自链接查询&#xff1a; 递归查询&#xff1a; 编写service接口实现&#xff1a; 引言&#xff1a; 看下图&#xff0c;这是 course_category 课程分类表的结构&#xff1a; 这张表是一个树型结构&#xff0c;通过父结点id将各元素组成一个树。 我…