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

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

引言

在机器学习中,集成学习是一种强大的技术,通过组合多个弱学习器来创建一个强学习器。本文将通过实践对比两种常用的集成算法:装袋法(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. 大规模数据:如何在大数据场景下应用集成学习


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

相关推荐
InfiSight智睿视界15 小时前
AI 技术助力汽车美容行业实现精细化运营管理
大数据·人工智能
没有钱的钱仔16 小时前
机器学习笔记
人工智能·笔记·机器学习
听风吹等浪起16 小时前
基于改进TransUNet的港口船只图像分割系统研究
人工智能·深度学习·cnn·transformer
priority_key17 小时前
排序算法:堆排序、快速排序、归并排序
java·后端·算法·排序算法·归并排序·堆排序·快速排序
化作星辰17 小时前
深度学习_原理和进阶_PyTorch入门(2)后续语法3
人工智能·pytorch·深度学习
boonya17 小时前
ChatBox AI 中配置阿里云百炼模型实现聊天对话
人工智能·阿里云·云计算·chatboxai
8K超高清17 小时前
高校巡展:中国传媒大学+河北传媒学院
大数据·运维·网络·人工智能·传媒
不染尘.17 小时前
2025_11_7_刷题
开发语言·c++·vscode·算法
老夫的码又出BUG了17 小时前
预测式AI与生成式AI
人工智能·科技·ai
AKAMAI17 小时前
AI 边缘计算:决胜未来
人工智能·云计算·边缘计算