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

机器学习——集成学习(Ensemble Learning):随机森林(Random Forest),AdaBoost、Gradient Boosting,Stacking

随机森林实战:

机器学习——随机森林(Random Forest)实战案例:信用卡欺诈检测数据-CSDN博客https://blog.csdn.net/2302_78022640/article/details/149962981?spm=1011.2415.3001.5331


集成学习(Ensemble Learning)详解:原理、方法与实战应用

在机器学习的世界里,单个模型往往存在泛化能力差、稳定性低、偏差或方差大等问题。为了解决这些问题,集成学习(Ensemble Learning) 应运而生。它的核心思想非常简单:“众人拾柴火焰高” —— 把多个模型组合起来,使整体性能优于任何一个单独的模型。

“三个臭皮匠,顶个诸葛亮”


什么是集成学习?

集成学习 是一种将多个基础模型(通常是“弱学习器”)组合起来构建一个更强大的“集成模型”的方法。通过对多个模型的结果进行加权、投票或平均等方式合成,可以显著提升最终预测性能。

📌 举例:如果你请5位医生分别对某个病例进行诊断,然后取大多数医生的意见作为最终判断,这就是一种现实中的“集成学习”。


为什么要使用集成学习?

  • 提高准确率:多个模型结合,可以互相弥补偏差。

  • 降低过拟合风险:集成能减少单一模型对特定噪声的敏感性。

  • 提升稳定性与鲁棒性:不会因为某一个模型表现不好而导致整体性能下降。


集成学习的三大核心方法

方法名核心思想代表算法
Bagging并行训练多个模型,投票或平均随机森林(Random Forest)
Boosting顺序训练多个模型,每一轮关注前一轮的错误样本AdaBoost、Gradient Boosting、XGBoost
Stacking用一个“元模型”组合多个子模型的输出各类模型混合如LR + SVM + RF + GBDT

1️⃣ Bagging(Bootstrap Aggregating)

原理:
  • 从原始数据集中有放回地采样出多个子数据集。

  • 每个子数据集训练一个独立的模型(弱分类器)。

  • 最后对结果进行多数投票(分类)或平均值(回归)处理。

代表算法:随机森林(Random Forest)
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)

✅ 优点:

  • 降低方差

  • 不易过拟合

❌ 缺点:

  • 不一定能有效降低偏差

  • 各个模型之间是独立训练,未能互相学习


2️⃣ Boosting

原理:
  • 训练是顺序进行的,每个模型关注上一个模型的错误。

  • 最终将弱学习器进行加权融合

代表算法:
        AdaBoost(Adaptive Boosting)
  • 增加错分样本的权重,让下一个模型更关注这些“难样本”。

        Gradient Boosting / XGBoost / LightGBM
  • 每一轮模型拟合的是上一次的残差(误差),以梯度方式迭代优化。

from xgboost import XGBClassifier
model = XGBClassifier()
model.fit(X_train, y_train)

✅ 优点:

  • 减少偏差,性能高

  • 可处理复杂非线性关系

❌ 缺点:

  • 训练时间长

  • 对噪声敏感(尤其是AdaBoost)


3️⃣ Stacking(堆叠)

原理:
  • 将多个不同类型的模型(如决策树、SVM、神经网络)作为一级模型

  • 将它们的预测结果作为特征,输入给二级模型(元学习器)

  • 由元学习器做最终的预测。

from sklearn.ensemble import StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVCestimators = [('dt', DecisionTreeClassifier()),('svc', SVC(probability=True))]stack = StackingClassifier(estimators=estimators,final_estimator=LogisticRegression())
stack.fit(X_train, y_train)

✅ 优点:

  • 能整合多种算法的优点

  • 性能往往优于单一模型

❌ 缺点:

  • 实现复杂、训练时间长

  • 易过拟合(需小心调参)


三者对比总结

特点BaggingBoostingStacking
模型训练并行顺序自由组合
是否加权是(通过元模型)
偏差/方差降低方差降低偏差二者兼顾
可解释性较强中等
调参复杂度较低较高

集成学习实战案例:信用卡欺诈检测

数据集:鸢尾花数据(load_iris)

# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix# 1. 加载鸢尾花数据集
iris = load_iris()
X = iris.data  # 特征数据(花萼长度、花萼宽度、花瓣长度、花瓣宽度)
y = iris.target  # 标签数据(0:山鸢尾, 1:变色鸢尾, 2:维吉尼亚鸢尾)# 2. 拆分训练集和测试集(70%训练,30%测试)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42  # random_state确保结果可复现
)# 3. 创建并训练随机森林模型
# n_estimators: 森林中树的数量
# random_state: 随机种子,确保结果可复现
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)  # 用训练集训练模型# 4. 用模型进行预测
y_pred = rf_model.predict(X_test)  # 预测测试集的标签# 5. 评估模型性能
print("\n=== 模型评估 ===")
# 准确率:正确分类的样本占总样本的比例
print(f"准确率: {accuracy_score(y_test, y_pred):.4f}")# 混淆矩阵:展示各类别的预测情况
print("\n混淆矩阵:")
print(confusion_matrix(y_test, y_pred))# 分类报告:包含精确率、召回率、F1分数等详细指标
print("\n分类报告:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))# 6. 查看特征重要性(随机森林的优势之一)
print("\n=== 特征重要性 ===")
for name, importance in zip(iris.feature_names, rf_model.feature_importances_):print(f"{name}: {importance:.4f}")# 7. 使用模型预测新样本
# 假设新样本的特征:花萼长5.0, 花萼宽3.5, 花瓣长1.5, 花瓣宽0.2
new_sample = [[5.0, 3.5, 1.5, 0.2]]
predicted_class = rf_model.predict(new_sample)
print("\n新样本预测结果:", iris.target_names[predicted_class][0])

补充说明:

  • 随机森林在不平衡数据集上表现稳定

  • 可通过下采样/过采样 + 集成模型进一步优化精度


集成学习的发展趋势

  • AutoML框架中集成方法广泛使用(如 H2O、AutoGluon、TPOT)

  • 深度学习中也使用类似思想,如集成多个神经网络、模型蒸馏

  • 集成学习 + 模型解释性工具(如 SHAP、LIME)逐渐成为主流


结语:何时使用集成学习?

  • 单一模型性能欠佳时,优先考虑。

  • 数据集偏差较大时,可以通过 Boosting 提升拟合能力。

  • 要求鲁棒性和高精度任务(如金融欺诈检测、医疗诊断等)首选集成学习。

🌈 记住:集成不是“万能药”,但在大多数实战中,效果非常惊艳

http://www.lryc.cn/news/611257.html

相关文章:

  • 论文阅读笔记:《Curriculum Coarse-to-Fine Selection for High-IPC Dataset Distillation》
  • 2.4 组件通信
  • 高阶 RAG :技术体系串联与实际落地指南​
  • 计算机网络 第2章通信基础(竟成)
  • PYQT的QMessageBox使用示例
  • 深入理解 Ext 系列文件系统:从磁盘物理到文件系统原理
  • 注意点:如何使用conda创建虚拟环境并使用虚拟环境以及当安装相关库时,如何指定安装到那个环境里面 ---待看
  • LINUX-进程管理及基础管理
  • Java开发时出现的问题---并发与资源管理深层问题
  • OpenSpeedy绿色免费版下载,提升下载速度,网盘下载速度等游戏变速工具
  • day25 进程
  • FastAPI快速入门P2:与SpringBoot比较
  • 【数据结构初阶】--排序(三):冒泡排序,快速排序
  • add_key系统调用及示例
  • 《C++》继承完全指南:从入门到精通
  • 【Day 16】Linux-性能查看
  • 计算机基础:操作系统学习的基石
  • 分布式微服务--Nacos 集群部署
  • RabbitMQ延时队列的两种实现方式
  • 磁悬浮转子的“静音术”:深度解析无接触抑制旋转幽灵的奥秘
  • 基于华为开发者空间的Open WebUI数据分析与可视化实战
  • 【Linux系统编程】线程概念与控制
  • MATLAB实现菲涅尔法全息成像仿真
  • Spring Boot 整合 Web 开发全攻略
  • Java面试宝典:深入解析JVM运行时数据区
  • Linux 内存管理之 Rmap 反向映射(二)
  • EP01:【DL 第二弹】张量(Tensor)的创建和常用方法
  • BloodHound 8.0 首次亮相,在攻击路径管理方面进行了重大升级
  • IPD研发管理——决策评审DCP指南
  • Java从入门到精通 - 集合框架(一)