机器学习集成算法实践:装袋法与提升法对比分析

机器学习集成算法实践:装袋法与提升法对比分析

引言

在机器学习中,集成学习是一种强大的技术,通过组合多个弱学习器来创建一个强学习器。本文将通过实践对比两种常用的集成算法:装袋法(Bagging)和提升法(Boosting),使用乳腺癌数据集进行分类任务,并分析它们的性能表现。

数据集介绍

我们使用 scikit-learn 内置的乳腺癌数据集(load_breast_cancer):

  • 这是一个二分类数据集

  • 包含 569 个样本

  • 每个样本有 30 个特征

  • 目标变量为癌症的良恶性分类

实验设置

基本参数

python 复制代码
import numpy as np

from sklearn.model_selection import KFold

from sklearn.model_selection import cross_val_score

from sklearn.ensemble import BaggingClassifier, AdaBoostClassifier

from sklearn.tree import DecisionTreeClassifier

from sklearn import datasets

# 加载乳腺癌数据集

dataset_all = datasets.load_breast_cancer()

X = dataset_all.data

Y = dataset_all.target

seed = 42

交叉验证设置

python 复制代码
# 设置10折交叉验证,启用shuffle确保随机性

kfold = KFold(n_splits=10, shuffle=True, random_state=seed)

重要修复说明 :必须设置shuffle=True才能使random_state参数生效,确保实验的可重复性。

基础模型:决策树

模型 1:深度为 2 的决策树

python 复制代码
cart = DecisionTreeClassifier(criterion='gini', max_depth=2)

cart = cart.fit(X, Y)

result = cross_val_score(cart, X, Y, cv=kfold)

print("CART树结果:", result.mean())

模型 2:深度为 3 的决策树

python 复制代码
dtree = DecisionTreeClassifier(criterion='gini', max_depth=3)

dtree = dtree.fit(X, Y)

result = cross_val_score(dtree, X, Y, cv=kfold)

print("决策树结果:", result.mean())

集成学习方法

1. 装袋法(Bagging)

python 复制代码
model = BaggingClassifier(base_estimator=cart, n_estimators=100, random_state=seed)

result = cross_val_score(model, X, Y, cv=kfold)

print("装袋法提升后结果:", result.mean())

装袋法原理

  • 并行训练多个相同的基础模型

  • 每个模型使用不同的训练子集(通过 bootstrap 采样)

  • 最终结果通过投票或平均获得

  • 主要作用是减少方差,提高模型稳定性

2. 提升法(AdaBoost)

python 复制代码
model = AdaBoostClassifier(base_estimator=dtree, n_estimators=100, random_state=seed)

result = cross_val_score(model, X, Y, cv=kfold)

print("提升法改进结果:", result.mean())

提升法原理

  • 串行训练多个基础模型

  • 每个模型都尝试纠正前一个模型的错误

  • 错误样本会被赋予更高的权重

  • 主要作用是减少偏差,提高模型准确性

实验结果与分析

预期结果分析

基于算法特性,我们可以预期:

  1. 基础决策树
  • 深度为 2 的决策树:简单模型,可能存在欠拟合

  • 深度为 3 的决策树:复杂度适中,性能应该更好

  1. 装袋法提升
  • 应该比单个决策树有显著提升

  • 特别是在减少方差方面效果明显

  1. 提升法改进
  • 通常能获得最佳性能

  • 通过迭代纠正错误,准确性更高

结果解读要点

装袋法 vs 提升法的关键区别

特性 装袋法(Bagging) 提升法(Boosting)
训练方式 并行 串行
样本权重 均匀 动态调整
主要作用 减少方差 减少偏差
过拟合风险 较低 较高
计算效率 高(可并行) 低(需串行)

关键技术要点

1. 随机状态管理

python 复制代码
seed = 42

kfold = KFold(n_splits=10, shuffle=True, random_state=seed)
  • 设置固定的随机种子确保实验可重复

  • shuffle=Truerandom_state生效的前提

2. 模型参数选择

python 复制代码
# 决策树参数

DecisionTreeClassifier(criterion='gini', max_depth=2)
  • criterion='gini':使用基尼系数作为分裂标准

  • max_depth:控制树的复杂度,防止过拟合

3. 集成参数设置

python 复制代码
# 装袋法

BaggingClassifier(base_estimator=cart, n_estimators=100, random_state=seed)

# 提升法

AdaBoostClassifier(base_estimator=dtree, n_estimators=100, random_state=seed)
  • n_estimators=100:使用 100 个基础模型

  • base_estimator:指定基础学习器

实际应用建议

何时使用装袋法

  • 基础模型容易过拟合时

  • 需要并行训练以提高效率时

  • 数据集较大,需要稳定的预测结果时

何时使用提升法

  • 需要更高预测准确性时

  • 基础模型是弱学习器时

  • 计算资源充足,可以接受串行训练时

模型选择策略

  1. 从简单模型开始:先尝试基础决策树

  2. 逐步复杂:根据需要选择装袋或提升

  3. 参数调优:通过交叉验证优化超参数

  4. 结果解释:关注模型的可解释性

结论

通过本次实验,我们验证了集成学习在提高模型性能方面的有效性:

  1. 装袋法通过并行训练多个模型,有效减少了方差,提高了模型的稳定性

  2. 提升法通过串行训练和错误纠正,显著减少了偏差,提高了预测准确性

  3. 选择合适的基础模型对集成效果至关重要

在实际应用中,应根据具体问题和数据特点选择合适的集成方法,并通过实验验证不同算法的性能表现。

扩展思考

  1. 其他集成方法:随机森林、梯度提升树等

  2. 特征工程:如何进一步提升模型性能

  3. 模型解释:如何理解集成模型的决策过程

  4. 大规模数据:如何在大数据场景下应用集成学习


本文通过实践对比了装袋法和提升法两种集成学习算法,希望能为读者理解和应用集成学习提供帮助。

相关推荐
董董灿是个攻城狮5 分钟前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者33 分钟前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考40 分钟前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
冬奇Lab1 小时前
OpenClaw 源码精读(2):Channel & Routing——一条消息如何找到它的 Agent?
人工智能·开源·源码阅读
冬奇Lab1 小时前
一天一个开源项目(第38篇):Claude Code Telegram - 用 Telegram 远程用 Claude Code,随时随地聊项目
人工智能·开源·资讯
格砸3 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
可观测性用观测云3 小时前
可观测性 4.0:教系统如何思考
人工智能
sunny8653 小时前
Claude Code 跨会话上下文恢复:从 8 次纠正到 0 次的工程实践
人工智能·开源·github
小笼包包仔3 小时前
OpenClaw 多Agent软件开发最佳实践指南
人工智能
smallyoung4 小时前
AgenticRAG:智能体驱动的检索增强生成
人工智能