【机器学习】集成学习方法:Bagging与Boosting的应用与优势

在这里插入图片描述

🔥 个人主页:空白诗

在这里插入图片描述

文章目录

    • 引言
    • 一、集成学习的定义
    • 二、Bagging方法
      • 1. 随机森林(Random Forest)
      • 2. 其他Bagging方法
    • 二、Boosting方法
      • 1. 梯度提升树(Gradient Boosting Machine, GBM)
        • 解释GBM的基本原理和训练过程
        • 讨论GBM在逐步改进模型预测性能方面的优势
      • 2. XGBoost
        • 介绍XGBoost作为GBM的一种高效实现
        • XGBoost的特性和在各类比赛中的优异表现
      • 3. LightGBM和CatBoost
        • 概述LightGBM和CatBoost的特点及应用场景
    • 三、总结

在这里插入图片描述

引言

机器学习作为人工智能的一个重要分支,旨在通过数据驱动的方式让计算机自动从经验中学习,并进行预测或决策。机器学习技术在诸多领域,如图像识别、自然语言处理、推荐系统和金融预测等,取得了广泛应用和显著成果。然而,尽管机器学习模型在特定任务中表现优异,但单一模型在泛化能力上的局限性也逐渐显现出来。

单一模型往往容易受到训练数据的影响,可能会过拟合训练集,即在训练数据上表现很好,但在未见过的测试数据上表现较差。过拟合的问题严重影响了模型的泛化能力,即模型在处理新数据时的表现。因此,提高模型的泛化能力成为了机器学习研究中的一个重要课题。

为了克服单一模型在泛化能力上的不足,集成学习(Ensemble Learning)作为一种有效的方法被提出并得到了广泛应用。集成学习通过构建和组合多个基学习器(Base Learners),可以显著提升模型的预测性能和稳定性。集成学习方法在理论和实践中都证明了其在提高模型泛化能力方面的优势。


一、集成学习的定义

在这里插入图片描述

集成学习是一种通过训练多个基学习器并将它们的预测结果进行组合,从而获得更优模型性能的方法。基学习器可以是同质的(如多个决策树)或异质的(如决策树、支持向量机和神经网络的组合)。集成学习的核心思想是通过多模型的集成来减小单个模型的误差,最终获得更稳健和准确的预测结果。

集成学习方法主要分为两大类:BaggingBoosting。Bagging(Bootstrap Aggregating)通过对训练数据进行重采样来构建多个基学习器,并对它们的预测结果进行平均或投票;Boosting则通过逐步调整基学习器的权重,使后续的基学习器更关注之前模型中难以预测的样本。这两种方法虽然在实现上有所不同,但都通过模型集成有效地提高了泛化能力和预测精度。

通过对集成学习的深入研究和应用,可以发现其在各种实际问题中的显著优势,使得它成为现代机器学习中不可或缺的重要方法之一。


二、Bagging方法

1. 随机森林(Random Forest)

随机森林(Random Forest)是一种基于Bagging(Bootstrap Aggregating)思想的集成学习方法。它由Leo Breiman在2001年提出,是对决策树算法的改进。随机森林通过构建多棵决策树来进行分类或回归,并通过这些树的集合投票(分类)或平均(回归)来获得最终的预测结果。

在这里插入图片描述

随机森林的核心在于其随机性和多样性。构建随机森林的步骤如下:

  1. 数据子集随机抽样:对于每一棵决策树,从原始训练数据集中随机抽取一个子集(有放回抽样,即Bootstrap抽样),这些子集之间可以有重叠。
  2. 特征子集随机选择:在构建每棵树的过程中,对每个节点的划分,随机选择特征的一个子集进行最佳分裂。这一过程增加了树之间的差异性。

这种随机性在一定程度上减少了每棵树的相关性,使得最终的模型更为稳健和准确。

通过Python代码可以更好地理解随机森林的构建过程。下面是一个使用Scikit-learn库构建随机森林的示例:

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载数据集
data = load_iris()
X = data.data
y = data.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建随机森林分类器
rf_clf = RandomForestClassifier(n_estimators=100, random_state=42)# 训练模型
rf_clf.fit(X_train, y_train)# 预测
y_pred = rf_clf.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Random Forest Accuracy: {accuracy:.2f}")

随机森林通过集成多棵决策树,显著提高了模型的稳定性和泛化能力:

  1. 降低过拟合:单棵决策树容易过拟合训练数据,而随机森林通过对多个决策树的结果进行平均或投票,可以减少单棵树的过拟合风险,增强对新数据的泛化能力。
  2. 提高稳定性:由于随机森林是由多棵独立决策树组成的,个别树的异常预测不会对整体结果产生重大影响,从而提高了模型的稳定性和鲁棒性。

2. 其他Bagging方法

除了随机森林,Bagging还应用于其他多种模型中,以进一步提高模型性能。常见的Bagging方法包括:

  • Bagged Decision Trees:这是最原始的Bagging方法,直接对决策树进行Bootstrap抽样和集成。与随机森林不同,Bagged Decision Trees并不进行特征子集的随机选择,只是对数据进行抽样。
  • Bagged K-Nearest Neighbors (KNN):在KNN中,Bagging通过对不同的Bootstrap样本集构建多个KNN模型,并将这些模型的结果进行平均或投票,从而提高预测性能。
  • Bagged Neural Networks:将Bagging应用于神经网络,通过多个神经网络的集成来减少单个网络的过拟合和提高泛化能力。

这些Bagging方法都利用了Bootstrap抽样和集成的思想,通过多个模型的组合来增强整体预测能力和稳健性。

以下是一个使用Bagged Decision Trees的示例代码:

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载数据集
data = load_iris()
X = data.data
y = data.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建基学习器
base_clf = DecisionTreeClassifier(random_state=42)# 创建Bagging分类器
bagging_clf = BaggingClassifier(base_estimator=base_clf, n_estimators=50, random_state=42)# 训练模型
bagging_clf.fit(X_train, y_train)# 预测
y_pred = bagging_clf.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Bagged Decision Trees Accuracy: {accuracy:.2f}")

通过这些示例代码,展示了如何使用Bagging方法构建集成模型,并说明了这些方法在提高模型性能和稳定性方面的效果。

二、Boosting方法

1. 梯度提升树(Gradient Boosting Machine, GBM)

解释GBM的基本原理和训练过程

在这里插入图片描述

梯度提升树(Gradient Boosting Machine, GBM)是一种迭代的集成学习方法,通过组合多个弱学习器(通常是决策树)来提高模型的预测性能。GBM的基本思想是通过逐步减小前一个模型的误差来构建新的模型,每一步都试图纠正前一步的错误。其训练过程可以分为以下几个步骤:

  1. 初始化模型:首先,用一个简单的模型(通常是一个常数模型)来预测目标值。这个模型的输出是所有样本的平均值。
  2. 计算残差:计算当前模型的残差,即真实值与预测值之间的差异。
  3. 训练弱学习器:用这些残差作为目标值,训练一个新的弱学习器(如决策树)。
  4. 更新模型:将弱学习器的预测结果乘以一个学习率,然后加到当前模型上,更新模型的预测值。
  5. 重复迭代:重复步骤2-4,直到达到预定的迭代次数或模型误差不再显著下降。

以下是GBM的示例代码,使用Scikit-learn库实现:

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载数据集
data = load_iris()
X = data.data
y = data.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建GBM分类器
gbm_clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, random_state=42)# 训练模型
gbm_clf.fit(X_train, y_train)# 预测
y_pred = gbm_clf.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"GBM Accuracy: {accuracy:.2f}")
讨论GBM在逐步改进模型预测性能方面的优势

GBM在逐步改进模型预测性能方面具有显著优势:

  1. 逐步优化:GBM通过迭代的方式,每一步都在前一步的基础上进行改进,逐步减小误差。这种方法使得GBM可以有效地捕捉数据中的复杂模式。
  2. 灵活性高:GBM可以处理各种类型的数据,包括数值型、分类型和文本数据。它在处理非线性关系和复杂数据结构方面表现尤为出色。
  3. 可调参数:GBM提供了多个超参数(如树的数量、深度和学习率)供调节,用户可以根据具体问题调整这些参数,以优化模型性能。

2. XGBoost

介绍XGBoost作为GBM的一种高效实现

XGBoost(eXtreme Gradient Boosting)是GBM的一种高效实现,它在GBM的基础上进行了多项改进,使其在速度和性能上都有显著提升。XGBoost的关键特性包括:

  1. 正则化:XGBoost通过引入L1和L2正则化,控制模型复杂度,防止过拟合。
  2. 并行计算:XGBoost利用并行计算技术,加快了模型训练速度。
  3. 树的分裂算法:XGBoost采用了更高效的分裂算法,能够更快速地找到最佳分裂点。
  4. 处理缺失值:XGBoost能够自动处理数据中的缺失值,提升了模型的鲁棒性。

以下是使用XGBoost的示例代码:

import xgboost as xgb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载数据集
data = load_iris()
X = data.data
y = data.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建XGBoost分类器
xgb_clf = xgb.XGBClassifier(n_estimators=100, learning_rate=0.1, random_state=42)# 训练模型
xgb_clf.fit(X_train, y_train)# 预测
y_pred = xgb_clf.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"XGBoost Accuracy: {accuracy:.2f}")
XGBoost的特性和在各类比赛中的优异表现

XGBoost由于其高效的实现和出色的性能,广泛应用于各种机器学习比赛中,并且在许多比赛中表现优异。其特性包括:

  1. 高效性:XGBoost在处理大规模数据时表现出色,训练速度快且内存占用低。
  2. 灵活性:XGBoost支持多种目标函数和评估指标,用户可以根据具体问题自定义损失函数和评估标准。
  3. 鲁棒性:XGBoost具有强大的鲁棒性,能够处理噪声数据和缺失值,提升模型的稳定性和泛化能力。

3. LightGBM和CatBoost

概述LightGBM和CatBoost的特点及应用场景

LightGBM

LightGBM(Light Gradient Boosting Machine)是由微软开发的一种高效的GBM实现,具有以下特点:

  1. 基于直方图的决策树算法:LightGBM使用直方图算法构建决策树,提高了训练速度和内存效率。
  2. 支持大规模数据:LightGBM在处理大规模数据时表现优异,适用于高维度数据和大数据场景。
  3. 高效的并行训练:LightGBM支持数据并行和特征并行,进一步加快了模型训练速度。

应用场景:LightGBM适用于需要处理大规模数据集的场景,如推荐系统、点击率预测和金融风控等。

以下是使用LightGBM的示例代码:

import lightgbm as lgb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载数据集
data = load_iris()
X = data.data
y = data.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建LightGBM分类器
lgb_clf = lgb.LGBMClassifier(n_estimators=100, learning_rate=0.1, random_state=42)# 训练模型
lgb_clf.fit(X_train, y_train)# 预测
y_pred = lgb_clf.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"LightGBM Accuracy: {accuracy:.2f}")

CatBoost

CatBoost(Categorical Boosting)是由Yandex开发的一种GBM实现,专门优化了对类别特征的处理。其特点包括:

  1. 高效处理类别特征:CatBoost无需对类别特征进行独热编码,直接处理类别数据,简化了数据预处理过程。
  2. 减少过拟合:CatBoost通过对梯度计算进行改进,减小了梯度偏差,从而减少了过拟合现象。
  3. 自动化处理:CatBoost内置了许多自动化处理功能,如自动调整超参数和处理缺失值,提高了模型的易用性。

应用场景:CatBoost特别适用于含有大量类别特征的数据集,如广告点击率预测、推荐系统和金融预测等。

以下是使用CatBoost的示例代码:

from catboost import CatBoostClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载数据集
data = load_iris()
X = data.data
y = data.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建CatBoost分类器
cat_clf = CatBoostClassifier(n_estimators=100, learning_rate=0.1, random_state=42, verbose=0)# 训练模型
cat_clf.fit(X_train, y_train)# 预测
y_pred = cat_clf.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"CatBoost Accuracy: {accuracy:.2f}")

三、总结

集成学习方法通过结合多个基学习器的优势,显著提高了机器学习模型的泛化能力和预测性能。Bagging方法,如随机森林,通过对数据和特征进行重采样构建多个模型,减少了过拟合风险,提升了模型的稳定性和准确性。而Boosting方法,通过迭代地改进模型的误差,如梯度提升树(GBM)、XGBoost、LightGBM和CatBoost等,在处理复杂数据和提高预测性能方面表现尤为出色。

这些方法各具特色,在不同应用场景中发挥了重要作用。随机森林适用于需要高稳定性的任务,XGBoost由于其高效性和灵活性在比赛中表现优异,LightGBM则在大数据处理方面优势明显,而CatBoost专注于类别特征的处理,简化了预处理过程并提升了模型性能。

通过合理选择和应用这些集成学习方法,能够有效提升机器学习模型的表现,解决实际问题中的复杂挑战。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/350261.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 特惠寿司(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 特惠寿司(100分) 🌍 评测功能需要订阅专栏后私信联系清隆解…

9. 文本三剑客之awk

文章目录 9.1 什么是awk9.2 awk命令格式9.3 awk执行流程11.4 行与列11.4.1 取行11.4.2 取列 9.1 什么是awk 虽然sed编辑器是非常方便自动修改文本文件的工具,但其也有自身的限制。通常你需要一个用来处理文件中的数据的更高级工具,它能提供一个类编程环…

【二】【动态规划NEW】91. 解码方法,62. 不同路径,63. 不同路径 II

91. 解码方法 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : ‘A’ -> “1” ‘B’ -> “2” … ‘Z’ -> “26” 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法&#xff…

利用74HC165实现8路并行输入口的扩展

代码&#xff1a; #include <mega16.h>// Declare your global variables here #define hc165_clk PORTB.0 #define hc165_lp PORTB.1 #define hc165_out PINB.2unsigned char read_hc165(void) {unsigned char data0,i,temp0x80;hc165_lp0;hc165_lp1; for(i0;i<7;i)…

Git 基础操作(一)

Git 基础操作 配置Git 安装完Git后&#xff0c;首先要做的事情是设置你的 用户名 和 e-mail 地址。这样在你向仓库提交代码的时候&#xff0c;就知道是谁提交的&#xff0c;以及提交人的联系方式。 配置用户名和邮箱 使用git config [--global] user.name "你的名字&qu…

碳中和研究院OLED透明屏2x2整机项目方案

一、项目背景 随着全球气候变化和环境问题的日益严重&#xff0c;碳中和成为各国政府和企业的重要议题。为了响应这一趋势&#xff0c;黑龙江碳中和研究院计划引入先进的OLED透明屏技术&#xff0c;以展示其研究成果和碳中和理念。本项目旨在为该研究院提供一套高质量的OLED透明…

干部选拔任用的六条原则

在干部选拔任用的过程中&#xff0c;为确保选拔出的干部能够真正符合党和人民的期望&#xff0c;必须遵循以下六条原则&#xff1a; 一、党管干部原则 党管干部原则是指在整个干部选拔任用过程中&#xff0c;党要发挥总揽全局、协调各方的领导作用&#xff0c;确保选拔出的干…

pytorch 加权CE_loss实现(语义分割中的类不平衡使用)

加权CE_loss和BCE_loss稍有不同 1.标签为long类型&#xff0c;BCE标签为float类型 2.当reduction为mean时计算每个像素点的损失的平均&#xff0c;BCE除以像素数得到平均值&#xff0c;CE除以像素对应的权重之和得到平均值。 参数配置torch.nn.CrossEntropyLoss(weightNone,…

算法01 递推算法及相关问题详解【C++实现】

目录 递推的概念 训练&#xff1a;斐波那契数列 解析 参考代码 训练&#xff1a;上台阶 参考代码 训练&#xff1a;信封 解析 参考代码 递推的概念 递推是一种处理问题的重要方法。 递推通过对问题的分析&#xff0c;找到问题相邻项之间的关系&#xff08;递推式&a…

【机器学习】LightGBM: 优化机器学习的高效梯度提升决策树

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 LightGBM: 优化机器学习的高效梯度提升决策树引言一、LightGBM概览二、核心技术…

Go语言结构体内嵌接口

前言 在golang中&#xff0c;结构体内嵌结构体&#xff0c;接口内嵌接口都很常见&#xff0c;但是结构体内嵌接口很少见。它是做什么用的呢&#xff1f; 当我们需要重写实现了某个接口的结构体的(该接口)的部分方法&#xff0c;可以使用结构体内嵌接口。 作用 继承赋值给接口…

激活和禁用Hierarchy面板上的物体

1、准备工作&#xff1a; (1) 在HIerarchy上添加待隐藏/显示的物体&#xff0c;名字自取。如&#xff1a;endImage (2) 在Inspector面板&#xff0c;该物体的名称前取消勾选&#xff08;隐藏&#xff09; (3) 在HIerarchy上添加按钮&#xff0c;名字自取。如&#xff1a;tip…

chatgpt的命令词

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

汽车级TPSI2140QDWQRQ1隔离式固态继电器,TMUX6136PWR、TMUX1109PWR、TMUX1133PWR模拟开关与多路复用器(参数)

1、TPSI2140-Q1 是一款隔离式固态继电器&#xff0c;专为高电压汽车和工业应用而设计。 TPSI2140-Q1 与 TI 具有高可靠性的电容隔离技术和内部背对背 MOSFET 整合在一起&#xff0c;形成了一款完全集成式解决方案&#xff0c;无需次级侧电源。 该器件的初级侧仅由 9mA 的输入电…

CSS实现经典打字小游戏《生死时速》

&#x1f33b; 前言 CSS 中有这样一个模块&#xff1a;Motion Path 运动模块&#xff0c;它可以使元素按照自定义的路径进行移动。本文将为你讲解这个模块属性的使用&#xff0c;并且利用它实现我小时候电脑课经常玩的一个打字游戏&#xff1a;金山打字的《生死时速》。 &…

僵尸网络相关

个人电脑被植入木马之后&#xff0c;就会主动的连接被黑客控制的这个C&C服务器&#xff0c;然后这个服务器就会给被植入木马的这个电脑发指令&#xff0c;让他探测在他的局域网内还有没有其他的电脑了&#xff0c;如果有那么就继续感染同局域网的其他病毒&#xff0c;黑客就…

随机森林算法进行预测(+调参+变量重要性)--血友病计数数据

1.读取数据 所使用的数据是血友病数据&#xff0c;如有需要&#xff0c;可在主页资源处获取&#xff0c;数据信息如下&#xff1a; import pandas as pd import numpy as np hemophilia pd.read_csv(D:/my_files/data.csv) #读取数据 2.数据预处理 在使用机器学习方法时&…

手机在网状态-手机在网状态查询-手机在网站状态接口

查询手机号在网状态&#xff0c;返回正常使用、停机、未启用/在网但不可用、不在网&#xff08;销号/未启用/异常&#xff09;、预销户等多种状态 直连三大运营商&#xff0c;实时更新&#xff0c;可查询实时在网状态 高准确率-实时更新&#xff0c;准确率99.99% 接口地址&…

Matlab的Simulink系统仿真(simulink调用m函数)

这几天要用Simulink做一个小东西&#xff0c;所以在网上现学现卖&#xff0c;加油&#xff01; 起初的入门是看这篇文章MATLAB 之 Simulink 操作基础和系统仿真模型的建立_matlab仿真模型搭建-CSDN博客 写的很不错 后面我想在simulink中调用m文件 在 Simulink 中调用 MATLA…

解决Maven依赖引入不成功的问题

解决Maven依赖引入不成功的问题 确认IntelliJ IDEA中Maven的设置是否正确。 file --> settings --> maven 清除无效的jar&#xff0c;进入本地仓库清除或利用bat工具 以下是bat工具内容&#xff0c;运行即可。【把仓库地址换成你自己的地址进行无效jar包清除】 echo o…