基于Python的机器学习系列(13):Bagging

server/2024/10/21 3:09:12/

        在上一篇文章中,我们讨论了决策树的原理及其在分类任务中的应用。然而,单一的决策树模型往往容易过拟合,导致泛化能力较差。为了减小模型的方差,我们可以通过构建多个决策树来提升模型的表现。这种方法被称为Bagging(Bootstrap Aggregating),其核心思想是在训练多个模型时引入差异性,从而避免它们学到相同的内容。

Bagging 的工作原理

        Bagging 通过以下步骤来实现:

  1. 样本采样:从原始训练数据中进行有放回的采样,生成多个不同的子数据集。
  2. 训练多个模型:使用生成的子数据集训练多个决策树模型。
  3. 结果聚合:对所有模型的预测结果进行某种形式的聚合(如投票或取平均),从而得到最终的预测结果。

        例如,假设我们有一个包含 4 个样本的数据集,每个样本有 2 个特征。我们可以通过 Bagging 生成多个子数据集,并训练相应的决策树模型。最终,使用这些模型的预测结果进行聚合,得到最终的分类结果。

        在 Bagging 的变体中,如果采样是无放回的,那么这种方法被称为Pasting。Bagging 允许样本在多个模型中多次被采样,而 Pasting 则不允许在同一模型中重复采样。

1. 手动实现 Bagging

        首先,我们将从头开始实现 Bagging。为了简化代码,我们将使用 sklearn 中的 DecisionTreeClassifier 来作为我们的基础模型。

python">from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
import random
from scipy import stats
from sklearn.metrics import classification_report# 加载数据集并进行训练集和测试集划分
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, shuffle=True, random_state=42)# 定义模型参数和 Bagging 参数
B = 5  # 基模型数量
m, n = X_train.shape
boostrap_ratio = 1
tree_params = {'max_depth': 2, 'criterion': 'gini', 'min_samples_split': 5}
models = [DecisionTreeClassifier(**tree_params) for _ in range(B)]# 初始化子样本集
xsamples = np.zeros((B, int(boostrap_ratio * m), n))
ysamples = np.zeros((B, int(boostrap_ratio * m)))# 生成子样本集并训练每个基模型
for i in range(B):for j in range(int(boostrap_ratio * m)):idx = random.randrange(m)  # 随机采样xsamples[i, j, :] = X_train[idx]ysamples[i, j] = y_train[idx]# 训练模型models[i].fit(xsamples[i], ysamples[i])# 对测试集进行预测
predictions = np.zeros((B, X_test.shape[0]))
for i, model in enumerate(models):yhat = model.predict(X_test)predictions[i, :] = yhat# 聚合预测结果
yhat = stats.mode(predictions)[0][0]  # 获取众数作为最终预测结果
print(classification_report(y_test, yhat))

2. 使用 Sklearn 实现 Bagging

        sklearn 提供了便捷的 BaggingClassifier 接口来实现 Bagging,下面是使用 sklearn 的代码实现。

python">from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier# 使用 BaggingClassifier 实现 Bagging
tree = DecisionTreeClassifier()
bag = BaggingClassifier(tree, n_estimators=5, max_samples=0.99)bag.fit(X_train, y_train)
yhat = bag.predict(X_test)
print(classification_report(y_test, yhat))

结语

        通过本篇文章,我们了解了 Bagging 的基本原理以及如何在 Python 中实现这一算法。Bagging 通过构建多个模型并对它们的结果进行聚合,显著提升了模型的泛化能力。在下一篇文章中,我们将探讨 Bagging 的进阶形式——随机森林(Random Forests),进一步提升分类器的性能。

如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!

欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

谢谢大家的支持!


http://www.ppmy.cn/server/107001.html

相关文章

lvs-nat的https模式设置

前言:LVS工作模式分为NAT模式、TUN模式、以及DR模式。在lvs服务器上,设置虚拟ip并做负载均衡使用。使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层(Loader Balancer),中间的服务器群组层&a…

JVM知识点记录

仅作知识点框架记录,后续补充 4.JVM 参考资料:https://blog.csdn.net/qq_41701956/article/details/81664921 4.1 HotSpot todo 4.1.1 HotSpot内核 4.1.2 HotSpot启动 4.1.3 HotSpot系统初始化 4.1.4 HotSpot Oops模块 4.1.5 Klass框架 4.1.6 对…

基于x86 平台opencv的图像采集和seetaface6的人脸特征点功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.3 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的人脸特征点功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的人脸特征点模块从而…

计算机毕业设计选题-基于python的OA办公管理系统【python-爬虫-大数据定制】

💖🔥作者主页:毕设木哥 精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 实战项目 文章目录 实战项目 一、基于python的OA办公管理系统…

紫德堂蜡灸膏蜡疗代工,国家专利产品 品质保障

河南紫德堂生物科技有限公司,‌深耕健康产业多年,‌始终秉持产品研发与市场经营并重的核心理念,‌植根于我国博大精深的中药蜡疗文化,‌充分发挥自身优势,‌致力于为广大消费者提供优质的健康养生产品,‌以…

新版本 | GreatSQL 8.0.32-26全新发布 增强“四高”诸多新特性

近日,GreatSQL开源数据库社区正式发布 GreatSQL 8.0.32-26新版本,在高可用、高性能、高兼容、高安全等诸多方面进行了特性增强,修复多个缺陷,并详细说明了多个典型应用场景下,升级/降级到GreatSQL 8.0.32-26的操作策略…

【Linux】初步识操作系统

linux专栏:《Linux入门系列》 系列文章:gdb-调试器初入门(简单版使用) 编辑器vim入门(概念模式转换技巧) 目录 1. 概念 2. 设计操作系统的目的 3. 定位:操作系统负责管理 4. 如何理解管理 …

【区块链 + 司法存证】inBC 区块链存证服务系统 | FISCO BCOS应用案例

随着区块链技术不断普及,“区块链 存证”已经助推多个产业实现了电子证据的快速存证,覆盖从存证,到公示、 查询、提取和第三方检验的全功能过程。链上存证数据时具有的真实性、合法性、透明性、关联性,已经逐渐显 露价值。然而&a…