当前位置: 首页 > news >正文

【漫话机器学习系列】010.Bagging算法(Bootstrap Aggregating)

Bagging算法(Bootstrap Aggregating)

Bagging(Bootstrap Aggregating 的缩写)是一种集成学习方法,通过构建多个弱学习器(例如决策树)并将它们的结果进行平均(回归)或投票(分类),来提高模型的稳定性和准确性,减少过拟合。


1. 核心思想

Bagging 的核心思想是通过对数据的重复采样,生成多个不同的训练集(子集),然后在每个子集上训练一个基学习器,最终通过聚合这些学习器的结果来获得整体预测。

流程概述:
  1. 从原始数据集中随机有放回地抽样生成 B 个子数据集(每个子集大小与原始数据集相同)。
  2. 在每个子数据集上训练一个独立的基学习器。
  3. 对于分类任务,采用多数投票法;对于回归任务,采用平均法对基学习器的输出进行集成。

2. 关键特性

  • 随机采样:每个子数据集是通过有放回采样生成的,可能包含重复的数据。
  • 模型独立性:可以使用任意模型作为基学习器(如决策树、线性回归等)。
  • 偏差与方差的平衡:通过减少模型的方差(variance),提升模型的稳定性。

3. 算法流程

假设原始数据集为 D,包含 n 个样本。

  1. 数据采样

    • 从 D 中随机有放回地抽样 n 次,生成 B 个子数据集:D_1, D_2, \dots, D_B​。
  2. 基学习器训练

    • 使用基学习算法(如决策树)在每个子数据集上训练一个模型:h_1, h_2, \dots, h_B​。
  3. 模型集成

    • 分类任务:对每个样本,采用 B 个模型的投票结果,选择票数最多的类别作为最终预测结果。
    • 回归任务:对每个样本,计算 B 个模型的预测结果的平均值作为最终预测结果。

4. Python 示例

(1) 使用 Scikit-learn 的 Bagging
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 生成示例数据
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.3, random_state=42)# 使用 Bagging 包装决策树
bagging = BaggingClassifier(base_estimator=DecisionTreeClassifier(),n_estimators=10,  # 基学习器的数量max_samples=0.8,  # 每个子数据集的样本比例max_features=1.0,  # 使用的特征比例random_state=42
)# 训练模型
bagging.fit(X_train, y_train)# 评估模型
y_pred = bagging.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))

输出结果

Accuracy: 0.87
(2) 手动实现 Bagging(以决策树为例)
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.metrics import accuracy_score# 生成示例数据
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
n_estimators = 10  # 基学习器数量# Bagging 实现
models = []
predictions = []for _ in range(n_estimators):# 随机有放回采样indices = np.random.choice(range(X.shape[0]), size=X.shape[0], replace=True)X_sample, y_sample = X[indices], y[indices]# 训练基学习器model = DecisionTreeClassifier()model.fit(X_sample, y_sample)models.append(model)# 对测试集预测pred = model.predict(X)predictions.append(pred)# 多数投票(分类任务)
final_predictions = np.array(predictions).T
ensemble_pred = [np.bincount(row).argmax() for row in final_predictions]# 模型评估
print("Accuracy:", accuracy_score(y, ensemble_pred))

输出结果

Accuracy: 0.991

5. Bagging的优缺点

优点:
  1. 减少过拟合:Bagging 平均了多个模型的预测,减少了单一模型对数据噪声的敏感性。
  2. 易并行化:子数据集的生成和模型训练可以并行化处理。
  3. 适用性广:可以与任何基学习器结合使用。
缺点:
  1. 降低解释性:多个基学习器的组合使得模型不易解释。
  2. 训练成本较高:需要训练多个基学习器,训练时间可能较长。

6. Bagging与其他方法的比较

特性BaggingBoosting
样本选择有放回抽样不同权重选择样本
基学习器权重均等权重基于误差分配权重
偏差与方差减少方差减少偏差
并行化易于并行难以并行(依赖前一轮结果)
常用算法随机森林AdaBoost、Gradient Boosting

 7. 应用场景

  • 随机森林:Bagging 的经典应用,通过组合多棵决策树(随机采样数据和特征)形成强大的分类或回归模型。
  • 回归任务:通过 Bagging 平均多个弱学习器的输出,提升预测稳定性。
  • 分类任务:利用投票机制解决不平衡数据集问题。

Bagging 是集成学习的重要组成部分,其简单高效的特点使其在多种任务中表现出色。


http://www.mrgr.cn/news/80424.html

相关文章:

  • 渗透利器-kali工具 (第五章-6) Metasploit后门生成模块
  • Qt绘制仪表————附带详细说明和代码示例
  • 小米自研系统Vela全面开源:开启物联网新时代的技术革新之旅
  • 2024年09月机器人一级理论真题答案及解析
  • 细说STM32F407单片机SPI基础知识
  • git使用教程(超详细)-透彻理解git
  • 循环神经网络RNN笔记
  • LeetCode1.两数之和(超简单讲解)
  • 医疗领域的网络安全预防:保障患者隐私与医疗数据安全
  • LeetCode 283.移动零(超简单讲解)
  • docker离线安装、linux 安装docker
  • 概率论得学习和整理26:EXCEL 关于plot 折线图--频度折线图的一些细节
  • 通过一个例子学习回溯算法:从方法论到实际应用
  • 课设项目十:智能手电筒(使用金沙滩51单片机)
  • Qt WORD/PDF(三)使用 QAxObject 对 Word 替换(QML)
  • 【系统分析师】-收官整理-已考过
  • Day13洛谷 2043+2042+2040+2035+2034+2033+2030+2027+2031+2029
  • selenium工作原理
  • Python 参数配置使用 XML 文件的教程 || Python打包 || 模型部署
  • 规则引擎drools(一)-技术要点
  • 【软件工程】简答题系列(一)(山东大学·软院考试专属)
  • 【爬虫一】python爬虫基础合集一
  • ubuntu下anconda装pytorch
  • 业务观测:从定义到场景化分析
  • Linux栈帧
  • DALL·E 2(内含扩散模型介绍)-生成式模型【学习笔记】