集成学习(上):Bagging集成方法
一、什么是集成学习?
在机器学习的世界里,没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象",单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来,就能像拼图一样还原出完整的真相,接下来我们就来介绍一种“拼图”算法——集成学习。
集成学习是一种机器学习技术,它通过组合多个模型(通常称为“弱学习器”或“基础模型”)的预测结果,构建出更强、更准确的学习算法。这种方法的主要思想是利用群体智慧的概念——即整体性能优于单个个体。
1.1 集成学习的核心机制
集成学习大体分为三种序列集成方法(Boosting)、并行集成方法(Bagging)、堆叠集成方法(Stacking):

- Bagging(Bootstrap Aggregating)
-
原理:通过自助采样法(Bootstrap Sampling)生成多个子数据集,分别训练基学习器,最终通过投票(分类)或平均(回归)结合结果。
-
算法流程:
-
- 数学表达:
自助采样时,每个样本未被选中的概率为
P = ( 1 − 1 m ) m ≈ 1 e ≈ 36.8 % , P = \left(1 - \frac{1}{m}\right)^m \approx \frac{1}{e} \approx 36.8\%, P=(1−m1)m≈e1≈36.8%,
其中 m m m为原始数据集大小。 - 代表算法:随机森林(Random Forest)。
-
Boosting
- 原理:基学习器按顺序训练,后续模型重点关注前序模型的错误样本,最终加权结合所有模型的预测结果。
- 算法流程:

- 关键步骤:
- 计算基学习器的加权错误率 ϵ t \epsilon_t ϵt;
- 调整样本权重,使错误样本在下一轮训练中更受关注;
- 最终预测结果为各模型的加权投票。
- 代表算法:AdaBoost、GBDT、XGBoost。
-
Stacking(堆叠泛化)
-
原理:将多个基学习器的输出作为“元特征”,训练一个元学习器(Meta-Learner)进行最终预测。
-
算法流程

-
实现步骤:
- 基学习器在训练集上通过交叉验证生成元特征;
- 元学习器基于这些特征进行训练。
-
1.2 集成学习的优势
- 降低方差(Bagging):通过平均多个高方差模型(如决策树)的预测,减少过拟合。
- 降低偏差(Boosting):通过逐步修正错误,提升模型对复杂模式的拟合能力。
- 提高泛化能力:结合不同模型的优势,增强对未知数据的适应性。
1.3 局限性
- 计算成本高:需训练多个模型,时间和资源消耗较大。
- 可解释性差:模型复杂度高,难以直观理解预测逻辑。
- 过拟合风险:若基学习器本身过拟合,集成后可能加剧这一问题(尤其是Boosting)。
二、Bagging方法的革命性突破
在了解了集成学习之后,我们先来学习集成学习算法中的 Bagging 集成学习方法:
Bagging(Bootstrap Aggregating)作为集成学习三剑客之首,由Leo Breiman于1996年提出,其核心思想通过三个颠覆性创新彻底改变了机器学习实践:
- Bootstrap采样:有放回抽样生成多样性训练集
- 并行训练机制:基模型独立训练实现高效并行
- 民主投票策略:平等加权聚合降低预测方差
# Bootstrap采样可视化示例
import numpy as np
import matplotlib.pyplot as pltoriginal_data = np.arange(100)
bootstrap_samples = [np.random.choice(original_data, 100, replace=True) for _ in range(5)]plt.figure(figsize=(10,6))
for i, sample in enumerate(bootstrap_samples[:3]):plt.scatter([i]*100, sample, alpha=0.5)
plt.title("Bootstrap采样分布可视化")
plt.ylabel("样本索引")
plt.xlabel("采样批次")
plt.show()
三、算法原理深度剖析
3.1 数学本质
设基模型为 h i ( x ) h_i(x) hi(x),Bagging的预测结果为:
H ( x ) = 1 N ∑ i = 1 N h i ( x ) H(x) = \frac{1}{N}\sum_{i=1}^N h_i(x) H(x)=N1i=1∑Nhi(x)
方差分解公式:
Var ( H ) = ρ σ 2 + 1 − ρ N σ 2 \text{Var}(H) = \rho\sigma^2 + \frac{1-\rho}{N}\sigma^2 Var(H)=ρσ2+N1−ρσ2
其中 ρ \rho ρ 为模型间相关系数, σ 2 \sigma^2 σ2 为单个模型方差
3.2 关键技术创新
| 技术维度 | 传统方法 | Bagging创新 |
|---|---|---|
| 数据使用 | 全量数据 | 有放回抽样 |
| 模型关系 | 串行依赖 | 完全独立 |
| 预测聚合 | 加权平均 | 平等投票 |
| 特征选择 | 全特征 | 随机子空间 |
3.3 算法演进路线
四、六大核心实现技术
4.1 双重随机性设计
from sklearn.ensemble import RandomForestClassifier# 同时启用样本随机和特征随机
rf = RandomForestClassifier(max_samples=0.8, # 样本随机采样率max_features='sqrt', # 特征随机选择bootstrap=True
)
4.2 OOB(Out-of-Bag)估计
内置交叉验证通过 OOB 样本实现免交叉验证评估:
# OOB评分自动计算
rf = RandomForestClassifier(oob_score=True)
rf.fit(X_train, y_train)
print(f"OOB准确率:{rf.oob_score_:.4f}")
4.3 特征重要性分析
可视化关键影响因子:
import matplotlib.pyplot as pltfeatures = ["年龄", "收入", "负债率", "信用分"]
importances = forest.feature_importances_plt.barh(features, importances)
plt.title('特征重要性分析')
plt.show()

4.4 并行化加速
from joblib import Parallel, delayeddef train_tree(data):X_sample, y_sample = bootstrap_sample(data)return DecisionTree().fit(X_sample, y_sample)# 并行训练100棵树
trees = Parallel(n_jobs=8)(delayed(train_tree)(data) for _ in range(100))
4.5 概率校准
from sklearn.calibration import CalibratedClassifierCVcalibrated_rf = CalibratedClassifierCV(rf, method='isotonic', cv=5)
calibrated_rf.fit(X_train, y_train)
4.6 异常值鲁棒性
# 使用绝对误差替代平方误差
from sklearn.ensemble import RandomForestRegressorrobust_rf = RandomForestRegressor(criterion='absolute_error',max_samples=0.632,min_samples_leaf=10
)
五、实战指南
案例1:金融反欺诈系统
- 数据集:50万条交易记录
- 特征维度:128维(包含时序特征、设备指纹、交易模式等)
- 类别比例:正常交易98.7%,欺诈交易1.3%
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report# 加载百万级交易数据
X, y = load_fraud_transactions()# 构建随机森林模型
fraud_model = RandomForestClassifier(n_estimators=500,max_depth=10,class_weight="balanced"
)# 训练与评估
fraud_model.fit(X_train, y_train)
y_pred = fraud_model.predict(X_test)
print(classification_report(y_test, y_pred))
案例2:医疗影像诊断
import joblib
from skimage.feature import hog# 提取HOG特征
def extract_features(images):return np.array([hog(img) for img in images])# 训练癌症诊断模型
X_features = extract_features(medical_images)
cancer_model = RandomForestClassifier()
cancer_model.fit(X_features, labels)# 保存诊断系统
joblib.dump(cancer_model, "cancer_diagnosis.model")
案例3:电商推荐系统
from sklearn.ensemble import RandomForestRegressor# 用户行为特征矩阵
user_features = generate_user_vectors()# 预测购买概率
purchase_model = RandomForestRegressor()
purchase_model.fit(user_features, purchase_labels)# 实时推荐
live_user = get_live_data()
pred_score = purchase_model.predict([live_user])
案例4:工业设备预测性维护
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler# 构建特征工程流水线
maintenance_pipe = make_pipeline(StandardScaler(),RandomForestClassifier(n_estimators=300)
)# 在线学习更新
partial_data, partial_label = stream_data()
maintenance_pipe.partial_fit(partial_data, partial_label)
六、性能优化八项黄金法则
6.1 参数调优矩阵
| 参数 | 优化策略 | 推荐范围 |
|---|---|---|
| n_estimators | 早停法+OOB监控 | 200-2000 |
| max_depth | 交叉验证网格搜索 | 8-30 |
| max_features | 特征工程后动态调整 | sqrt/log2/0.3 |
| min_samples_split | 基于类别分布调整 | 2-50 |
| bootstrap | 样本量<10万设为True | Bool |
| class_weight | 使用balanced_subsample | auto/自定义 |
| ccp_alpha | 后剪枝优化 | 0-0.01 |
| max_samples | 大数据集设为0.8 | 0.6-1.0 |
6.1 超参数黄金组合(根据实际项目调整)
optimal_params = {'n_estimators': 500, # 树的数量'max_depth': 15, # 树的最大深度'min_samples_leaf': 5, # 叶节点最小样本数'max_features': 'sqrt', # 特征采样策略'n_jobs': -1, # 使用全部CPU核心'oob_score': True # 开启OOB评估
}
6.3 内存优化技巧
# 使用内存映射处理超大矩阵
import numpy as np
X = np.load('bigdata.npy', mmap_mode='r')# 增量训练
for subset in np.array_split(X, 10):partial_model = rf.fit(subset)rf.estimators_.extend(partial_model.estimators_)
6.4 特征工程技巧
- 对高基数类别特征进行目标编码
- 使用时间序列特征生成滞后变量
- 对数值特征进行分箱离散化
from category_encoders import TargetEncoder# 处理地址等类别特征
encoder = TargetEncoder()
X_encoded = encoder.fit_transform(X_cat, y)
七、踩坑实测避坑指南:十大常见误区
-
样本量不足时仍使用默认bootstrap
- 修正方案:当n_samples<1000时设置bootstrap=False
-
忽略特征重要性分析
- 必须使用permutation importance进行验证
-
类别不平衡数据使用普通随机森林
- 应选用BalancedRandomForest
-
超参数网格搜索顺序错误
- 正确顺序:n_estimators → max_depth → min_samples_split
-
误用OOB分数作为最终评估
- OOB需与holdout集结合验证
-
忽略特征尺度敏感性
- 树模型虽无需归一化,但对范围敏感特征需特殊处理
-
错误处理缺失值
- 应显式用np.nan表示缺失,而非填充-999
-
过度依赖默认参数
- 必须根据数据分布调整min_samples_leaf等参数
-
忽略并行化资源分配
- 合理设置n_jobs避免内存溢出
-
模型解释方法不当
- 推荐使用SHAP值替代传统feature_importance
八、行业应用全景图
| 行业领域 | 典型场景 | 技术要点 |
|---|---|---|
| 金融科技 | 反欺诈评分 | 时序特征处理+增量学习 |
| 医疗健康 | 疾病风险预测 | 多模态数据融合 |
| 智能制造 | 设备故障预警 | 振动信号特征提取 |
| 零售电商 | 用户流失预测 | 行为序列建模 |
| 自动驾驶 | 障碍物识别 | 点云数据处理 |
| 能源管理 | 电力负荷预测 | 多周期特征工程 |
| 网络安全 | 入侵检测 | 流量时序分析 |
| 物联网 | 传感器异常检测 | 边缘计算优化 |
九、性能对比实验
使用OpenML-CC18基准测试集对比:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from xgboost import XGBClassifier# 对比不同算法
datasets = fetch_openml('cc18')
results = {}
for name, data in datasets.items():X, y = datarf_score = cross_val_score(RandomForestClassifier(), X, y).mean()xgb_score = cross_val_score(XGBClassifier(), X, y).mean()results[name] = {'RF': rf_score, 'XGB': xgb_score}# 可视化对比结果
pd.DataFrame(results).T.plot(kind='box')
plt.title("算法性能对比")
实验结论:
- 在小样本场景(n<10k)下,RF平均准确率高出XGBoost 2.3%
- 在特征稀疏数据上,RF优势扩大到5.1%
- 在时间序列数据上,XGBoost反超1.7%
下篇预告:中篇将深入解析Boosting系列算法,揭秘XGBoost、LightGBM等冠军模型的核心原理;下篇将探讨Stacking与Blending高级集成策略,解锁Kaggle竞赛的终极武器。
通过本篇内容,您已经掌握了Bagging集成学习的核心要义。现在登录Kaggle选择任意数据集,使用随机森林开启您的第一个集成学习项目吧!当您处理下一个预测任务时,不妨先思考:这个场景是否需要更强的泛化能力?是否需要自动特征选择?如果是,Bagging就是您的最佳起点。
如果您有更好的建议,可以在评论区留言讨论。
相关文章:
集成学习(上):Bagging集成方法
一、什么是集成学习? 在机器学习的世界里,没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象",单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来,就能像拼图一样还原出完整的真相&a…...
DeepSeek R1 本地部署指南 (3) - 更换本地部署模型 Windows/macOS 通用
0.准备 完成 Windows 或 macOS 安装: DeepSeek R1 本地部署指南 (1) - Windows 本地部署-CSDN博客 DeepSeek R1 本地部署指南 (2) - macOS 本地部署-CSDN博客 以下内容 Windows 和 macOS 命令执行相同: Windows 管理员启动:命令提示符 CMD ma…...
【TI MSPM0】Timer学习
一、计数器 加法计数器:每进入一个脉冲,就加一减法计算器:每进入一个脉冲,就减一 当计数器减到0,触发中断 1.最短计时时间 当时钟周期为1khz时,最短计时时间为1ms,最长计时时间为65535ms 当时…...
Windows部署deepseek R1训练数据后通过AnythingLLM当服务器创建问答页面
如果要了解Windows部署Ollama 、deepseek R1请看我上一篇内容。 这是接上一篇的。 AnythingLLM是一个开源的全栈AI客户端,支持本地部署和API集成。它可以将任何文档或内容转化为上下文,供各种语言模型(LLM)在对话中使用。以下是…...
重删算法中的Bloom滤波器详解与C++实现
一、Bloom滤波器基础概念 Bloom滤波器(Bloom Filter)是一种空间高效的概率型数据结构,用于快速判断某个元素是否存在于集合中。其核心特性: 存在不确定性:可能出现假阳性(False Positive)&…...
信奥赛CSP-J复赛集训(模拟算法专题)(27):P5016 [NOIP 2018 普及组] 龙虎斗
信奥赛CSP-J复赛集训(模拟算法专题)(27):P5016 [NOIP 2018 普及组] 龙虎斗 题目背景 NOIP2018 普及组 T2 题目描述 轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有 n n n 个兵营(自左至右编号 1 ∼ n 1 \sim n 1∼n),相邻编号的兵营之间…...
多模态大模型常见问题
1.视觉编码器和 LLM 连接时,使用 BLIP2中 Q-Former那种复杂的 Adaptor 好还是 LLaVA中简单的 MLP 好,说说各自的优缺点? Q-Former(BLIP2): 优点:Q-Former 通过查询机制有效融合了视觉和语言特征…...
SpringBoot项目实战(初级)
目录 一、数据库搭建 二、代码开发 1.pom.xml 2.thymeleaf模块处理的配置类 3.application配置文件 4.配置(在启动类中) 5.编写数据层 ②编写dao层 ③编写service层 接口 实现类 注意 补充(注入的3个注解) 1.AutoWir…...
Linux NFS、自动挂载与系统启动管理指南
1. NFS客户端挂载导出的目录的方式 NFS(网络文件系统) 允许将远程服务器的目录挂载到本地,像访问本地文件一样操作远程文件。挂载方式主要有两种: 手动挂载:使用 mount 命令(临时生效,重启后丢…...
uniapp实现全局拖拽按钮
要先引入 “vue3-draggable-resizable”: “^1.6.5” 1.创建DragComponent组件 <template><!-- 抽屉组件 --><div class"drag-container" id"dragBox" :style"{ zIndex: zIndex }"><Vue3DraggableResizable :initW"…...
SOFABoot-10-聊一聊 sofatboot 的十个问题
前言 大家好,我是老马。 sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…...
计算机网络——总结
01. 网络的发展及体系结构 网络演进历程 从1969年ARPANET的4个节点发展到如今覆盖全球的互联网,网络技术经历了电路交换到分组交换、有线连接到无线覆盖的革命性变革。5G时代的到来使得网络传输速度突破10Gbps,物联网设备数量突破百亿级别。 网络体系…...
Umi-OCR- OCR 文字识别工具,支持截图、批量图片排版解析
Umi-OCR 是免费开源的离线 OCR 文字识别软件。无需联网,解压即用,支持截图、批量图片、PDF 扫描件的文字识别,能识别数学公式、二维码,可生成双层可搜索 PDF。内置多语言识别库,界面支持多语言切换,提供命令…...
高速网络包处理,基础网络协议上内核态直接处理数据包,XDP技术的原理
文章目录 预备知识TCP/IP 网络模型(4层、7层)iptables/netfilterlinux网络为什么慢 DPDKXDPBFPeBPFXDPXDP 程序典型执行流通过网络协议栈的入包XDP 组成 使用 GO 编写 XDP 程序明确流程选择eBPF库编写eBPF代码编写Go代码动态更新黑名单 预备知识 TCP/IP…...
C++:背包问题习题
1. 货币系统 1371. 货币系统 - AcWing题库 给定 V 种货币(单位:元),每种货币使用的次数不限。 不同种类的货币,面值可能是相同的。 现在,要你用这 V 种货币凑出 N 元钱,请问共有多少种不同的…...
数据可信安全流通实战,隐语开源社区Meetup武汉站开放报名
隐语开源社区 Meetup 系列再出发!2025 年将以武汉为始发站,聚焦"技术赋能场景驱动",希望将先进技术深度融入数据要素流转的各个环节,推动其在实际应用场景中落地生根,助力释放数据要素的最大潜能!…...
java使用Apache POI 操作word文档
项目背景: 当我们对一些word文档(该文档包含很多的标题比如 1.1 ,1.2 , 1.2.1.1, 1.2.2.3)当我们删除其中一项或者几项时,需要手动的对后续的进行补充。该功能主要是对标题进行自动的补充。 具…...
【 C/C++ 包管理工具】vcpkg安装+使用
【 C/C 包管理工具】vcpkg安装使用 Vcpkg 是由 Microsoft 和 C 社区维护的免费开源 C/C 包管理器,可在 Windows、macOS 和 Linux 上运行。 可以很方便的安装管理 C/C 库。 1. 安装 不要安装到Program Files这种有空格的路径下,否则后面安装库可能出现…...
免费开源的NAS解决方案:TrueNAS
TrueNAS是业内知名的FreeNAS系统的升级版,是一款开源的网络存储系统,具有高性能、稳定性和易用性等优点。 TrueNAS目前有三个版本,分别是TrueNAS CORE、TrueNAS ENTERPRISE、TrueNAS SCALE。其中,TrueNAS CORE基于FreeBSD开发&…...
LeetCode热题100精讲——Top1:两数之和【哈希】
你好,我是安然无虞。 文章目录 题目背景两数之和C解法Python解法 题目背景 如果大家对于 哈希 类型的概念并不熟悉, 可以先看我之前为此专门写的算法详解: 蓝桥杯算法竞赛系列第九章巧解哈希题,用这3种数据类型足矣 两数之和 题目链接:两数…...
github上传操作简单说明
前期准备 0.下载git(如果已经有了就不用了) 1.在GitHub上新建一个存储库 2.先在本地创建一个目录作为本地库目录,在目录里打开git bash进行上传 上传过程 echo "# Garbled_repair" >> README.md 作用:创建一个…...
GitLens with `Commit Graph`
文章目录 GitLens with Commit Graph GitLens with Commit Graph 想要更直观地查看 Git 提交历史?我打包了一个支持 Commit Graph 的 GitLens 版本,让你轻松在 VSCode 中查看分支、合并、变更记录等内容,一目了然! 📌…...
Rocky9.5基于sealos快速部署k8s集群
首先需要下载 Sealos 命令行工具,sealos 是一个简单的 Golang 二进制文件,可以安装在大多数 Linux 操作系统中。 以下是一些基本的安装要求: 每个集群节点应该有不同的主机名。主机名不要带下划线。 所有节点的时间需要同步。 需要在 K8s …...
阿里云服务器环境部署 四 MySQL主从配置
安装MySQL 导入mysql镜像 docker load -i /opt/dockerinstall/mysql/mysql-8.1.0.tar docker run --privilegedtrue --name mysql8 --restartunless-stopped -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -v /usr/local/mysql/logs:/var/log/mysql -v /usr/local/mysql/d…...
GPT-5 将免费向所有用户开放?
GPT-5 将免费向所有用户开放? 硅谷知名分析师 Ben Thompson 最近与 OpenAI CEO Sam Altman 进行了一场深度对谈,其中Sam Altman透漏GPT-5将免费向大家发放。 OpenAI 这波操作可不是一时冲动,而是被逼出来的。DeepSeek 这个新秀横空出世&am…...
web客户端存储,IndexDB相关讲解
IndexDB详细讲解 IndexedDB 是浏览器提供的一种底层 API,用于在客户端存储大量结构化数据。相比 Web Storage(localStorage/sessionStorage),它支持更复杂的数据结构、事务处理、索引查询等高级功能。以下是一个系统化的讲解: 一、核心概念 1、数据库(Database) 每…...
excel文件有两列,循环读取文件两列赋值到字典列表。字典的有两个key,分别为question和answer。将最终结果输出到json文件
import pandas as pd import json# 1. 读取 Excel 文件(假设列名为 question 和 answer) try:df pd.read_excel("input.xlsx", usecols["question", "answer"]) # 明确指定列 except Exception as e:print(f"读取文…...
项目日记 -云备份 -服务器配置信息模块
博客主页:【夜泉_ly】 本文专栏:【项目日记-云备份】 欢迎点赞👍收藏⭐关注❤️ 代码已上传 gitee 目录 前言配置信息文件文件配置类getInstance 获得实例readConfigFile 读取配置信息文件 测试 #mermaid-svg-ewlCpjdOf0q0VTLI {font-family:…...
gralloc usage flags
下面这些示例主要说明了 gralloc usage flags 在图像处理和多媒体应用中如何影响性能和正确性。让我们逐个详细分析每个问题的 根因 和 修复方案,并深入解析 gralloc 标志对 缓存管理 和 数据流 的影响。 ✅ Example 1: 长曝光快照耗时异常 📌 问题描述…...
Mysql配套测试之查询篇
🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 条件查询简单测试: 1.查询英语成绩不及格的同学(<60) 2…...
