首页 > 编程语言 >【集成学习|Bagging、Boosting 和 Stacking】三种常见的集成学习算法的联系与区别?以及如何实现?附代码学习

【集成学习|Bagging、Boosting 和 Stacking】三种常见的集成学习算法的联系与区别?以及如何实现?附代码学习

时间:2024-09-20 09:52:03浏览次数:9  
标签:集成 Bagging Stacking 模型 学习 Boosting test

【集成学习|Bagging、Boosting 和 Stacking】三种常见的集成学习算法的联系与区别?以及如何实现?

【集成学习|Bagging、Boosting 和 Stacking】三种常见的集成学习算法的联系与区别?以及如何实现?附代码学习


文章目录


1.集成学习算法:Bagging、Boosting 和 Stacking

1.1 Bagging(Bootstrap Aggregating)

Bagging 是一种并行集成学习方法,通过从数据集中有放回地随机抽样,生成多个子数据集,并在这些子数据集上训练多个基学习器(通常是弱学习器,比如决策树)。Bagging 的主要思想是通过平均多个模型的预测结果,减少模型的方差,提升预测性能

原理:

  • 1.从原始数据集中随机有放回地抽样,生成多个子数据集。
  • 2.对每个子数据集训练一个基学习器。
  • 3.对新数据的预测结果通过平均或投票的方式进行组合。

特点:

  • Bagging 通过并行方式独立训练多个模型,因此能够有效减少过拟合,适合高方差的模型(如决策树)。

典型应用:

  • 随机森林(Random Forest)是 Bagging 的代表算法。

1.2 Boosting

Boosting 是一种串行集成学习方法,其基本思想是通过组合多个弱学习器来提高整体预测能力。与 Bagging 不同的是,Boosting 通过调整每个弱学习器的权重来逐步提升模型的准确性。每个新模型都试图纠正前一个模型的错误。

原理:

  • 1.首先训练一个弱学习器,并对所有样本进行预测。
  • 2.对于预测错误的样本,提升它们的权重,使得下一轮学习器更多地关注这些错误分类的样本。
  • 3.继续重复这个过程,直到达到设定的弱学习器数量或错误率满足要求。
  • 4.最终将所有学习器的预测进行加权组合,得到最终预测结果。

特点:

  • Boosting 通过逐步调整错误样本的权重,能够显著提高模型的预测性能,但也更容易导致过拟合,适合低偏差的模型。

典型应用:

  • AdaBoost、Gradient Boosting、XGBoost 和 LightGBM 等。

1.3 Stacking

Stacking 是一种基于元学习的集成方法,旨在通过训练一个元模型来组合多个基模型的预测结果。与 Bagging 和 Boosting 不同,Stacking 不是简单地通过平均或投票的方式组合基模型,而是通过元模型来学习如何最好地结合这些基模型的预测

原理:

  • 1.训练多个不同的基学习器(可以是相同或不同的模型)。
  • 2.将每个基学习器的预测结果作为新的特征,构建一个“元”数据集。
  • 3.在元数据集上训练一个元模型,该模型的任务是根据基学习器的预测结果给出最终预测。

特点:

  • Stacking 允许使用不同的学习器,并通过元学习器提升组合模型的性能。它通常可以获得比单个模型更好的效果,但由于需要构建元数据集,训练时间较长。

典型应用:

  • Stacking 可以与回归、分类等不同类型的模型一起使用,提升复杂任务中的模型表现。

2.三者的联系与区别

联系:

  • 三者都是集成学习方法,目的都是通过组合多个模型来提升预测性能。它们能够减少单一模型的缺点,提高泛化能力。
  • 都依赖于多个模型的组合来减小偏差或方差,从而提高模型的泛化能力。

区别:

  • 训练方式不同Bagging 是并行方法,多个基学习器彼此独立;Boosting 是串行方法,每个基学习器依赖前一个学习器的结果;Stacking 是基于元学习的组合方法,通过元模型将基学习器的结果进行优化组合。
  • 侧重不同Bagging 主要减少方差,适合高方差模型;Boosting 主要减少偏差,适合低偏差模型;Stacking 则通过学习如何更好地组合不同模型,常用于更加复杂的任务。
  • 模型选择Bagging 中每个学习器权重相等;Boosting 中每个学习器的权重动态调整;Stacking 则通过元模型学习权重。

3.代码实现:使用scikit-learn实现Bagging、Boosting、Stacking

3.1Bagging的实现(随机森林)

代码示例:

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 切分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用随机森林分类器进行Bagging
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)

# 预测并评估模型
y_pred = rf.predict(X_test)
print("随机森林的准确率: ", accuracy_score(y_test, y_pred))

代码解释:

  • load_iris:加载Iris数据集,这是一个常用的多分类数据集。
  • RandomForestClassifier:这是Bagging的典型实现,通过训练多棵决策树构成随机森林。
  • train_test_split:将数据集分为训练集和测试集。
  • rf.fit:训练随机森林模型。
  • rf.predict:使用训练好的模型对测试集进行预测。
  • accuracy_score:计算模型的预测准确率。

3.2Boosting的实现(Gradient Boosting)

代码示例:

from sklearn.ensemble import GradientBoostingClassifier

# 使用梯度提升分类器
gb = GradientBoostingClassifier(n_estimators=100, random_state=42)
gb.fit(X_train, y_train)

# 预测并评估模型
y_pred_gb = gb.predict(X_test)
print("梯度提升的准确率: ", accuracy_score(y_test, y_pred_gb))

代码解释:

  • GradientBoostingClassifier:实现了Boosting方法,通过每次迭代训练来纠正前次错误。
  • gb.fit:训练梯度提升模型。
  • gb.predict:预测测试集结果。
  • accuracy_score:计算梯度提升模型的准确率。

3.3Stacking的实现

代码示例:

from sklearn.ensemble import StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC

# 定义基模型和元模型
estimators = [
    ('rf', RandomForestClassifier(n_estimators=50, random_state=42)),
    ('svc', SVC(kernel='linear', probability=True))
]

# 定义Stacking分类器,使用逻辑回归作为元学习器
stacking_clf = StackingClassifier(estimators=estimators, final_estimator=LogisticRegression())

# 训练模型
stacking_clf.fit(X_train, y_train)

# 预测并评估模型
y_pred_stacking = stacking_clf.predict(X_test)
print("Stacking的准确率: ", accuracy_score(y_test, y_pred_stacking))

代码解释:

  • StackingClassifier:集成了多个不同的基模型(随机森林和SVM)来进行预测,并使用逻辑回归作为元学习器。
  • estimators:定义了基模型列表。
  • final_estimator:定义了用于结合基模型结果的元学习器。
  • stacking_clf.fit:训练Stacking分类器。
  • stacking_clf.predict:对测试集进行预测。
  • accuracy_score:计算Stacking模型的准确率。

总结

Bagging、Boosting、Stacking都是常用的集成学习技术。

  • Bagging通过并行模型来减少方差,典型方法如随机森林。
  • Boosting通过串行模型逐步优化来减少偏差,典型方法如梯度提升。
  • Stacking通过组合不同模型来提高整体性能。

标签:集成,Bagging,Stacking,模型,学习,Boosting,test
From: https://blog.csdn.net/gaoxiaoxiao1209/article/details/142315544

相关文章

  • 【深度学习|可视化】如何以图形化的方式展示神经网络的结构、训练过程、模型的中间状
    【深度学习|可视化】如何以图形化的方式展示神经网络的结构、训练过程、模型的中间状态或模型决策的结果??【深度学习|可视化】如何以图形化的方式展示神经网络的结构、训练过程、模型的中间状态或模型决策的结果??文章目录【深度学习|可视化】如何以图形化的方式展示神经......
  • Java 在 GIS 领域的学习路线?
    Java是一门广泛应用于企业级开发的编程语言,而GIS则是一种常用于地理信息处理和分析的技术。将Java与GIS结合起来,可以在企业级应用中实现更多的功能和业务需求,且在实际领域越来越广泛。Java在GIS中重要的作用1、跨平台性Java具有跨平台的特性,Java在地理信息系统(GIS)领域发挥......
  • 学习CentOs我们必备入门基础知识
    目录前言一、文件系统结构二、命令行操作三、软件包管理四、系统监控与管理五、用户与权限管理六、网络配置与管理七、系统安全与维护八、系统启动与关机总结前言CentOS(CommunityEnterpriseOperatingSystem)是一个基于RedHatEnterpriseLinux(RHEL)的开源操作系统......
  • java重点学习-JVM类加载器+垃圾回收
    12.7类加载器JVM只会运行二进制文件,类加载器的作用就是将字节码文件加载到JVM中,从而让Java程序能够启动起来。类加载器有哪些启动类加载器(BootStrapClassLoader):加载JAVAHOME/jre/lib目录下的库扩展类加载器(ExtClassLoader):主要加载JAVAHOME/jre/lib/ext目录中的类......
  • 学习vue必备知识点
    v-if和v-for的优先级先说一下关于这个问题的答案:在vue2中,v-for的优先级高于v-if在vue3中,v-if的优先级高于v-for有时我们可能会这样1. 为了过滤列表中的项目<divv-for="userinusers"v-if="user.isActive">xxx</div>在vue2中,会先执行循环,再进行判断;哪怕最终渲染的只......
  • Python开发深度学习常见安装包 error 解决
    PythonPython是一种广泛使用的高级编程语言,它以其清晰的语法和代码可读性而闻名。Python支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。由于其简洁性和强大的标准库,Python成为了数据科学、机器学习、网络开发、自动化脚本、科学计算和教育等领域的首选语......
  • E语言学习
    1.E语言主要试用于以文件方式描述和交换数据的应用场合2.符号定义<1><>类起始符<2></>类结束符<3><!系统声明起始符<4>!>系统声明结束符<5>@数据块头引导符(横表式)<6>@@数据块头引导符(单列式)<7>@#数据块头引导符(多列式)<8>#数据行引导符<9>//注释引导符......
  • 【深度学习】Transformer掌握文本嵌入层和位置编码的实现过程,解码器中各个组成部分的
    1输入部分介绍输入部分包含:源文本嵌入层及其位置编码器目标文本嵌入层及其位置编码器 2文本嵌入层的作用 无论是源文本嵌入还是目标文本嵌入,都是为了将文本中词汇的数字表示转变为向量表示,希望在这样的高维空间捕捉词汇间的关系.文本嵌入层的代码分析:#导入必......
  • 超强合集||一行实现88个群智能算法优化混合核极限学习机HKELM的多特征输入单输出的数
    超强合集||一行实现88个群智能算法优化混合核极限学习机HKELM的多特征输入单输出的数据回归预测Matlab程序全家桶文章目录一、基本原理二、实验结果三、核心代码四、代码获取五、总结一、基本原理智能算法优化混合核极限学习机(HKELM)结合了智能优化技术,以进一步提......
  • Java中的图神经网络:如何在大规模图数据中实现嵌入学习
    Java中的图神经网络:如何在大规模图数据中实现嵌入学习大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!近年来,图神经网络(GraphNeuralNetworks,GNN)在处理图结构数据上取得了显著进展,尤其是在社交网络、推荐系统、知识图谱等领域。与传统的神经网络......