【机器学习】梯度提升和随机森林的概念、两者在python中的实例以及梯度提升和随机森林的区别

引言

梯度提升(Gradient Boosting)是一种强大的机器学习技术,它通过迭代地训练决策树来最小化损失函数,以提高模型的预测性能
随机森林(Random Forest)是一种基于树的集成学习算法,它通过组合多个决策树来提高预测的准确性和稳定性

文章目录

  • 引言
  • 一、梯度提升
    • 1.1 基本原理
      • 1.1.1 初始化模型
      • 1.1.2 迭代优化
      • 1.1.3 梯度计算
      • 1.1.4模型更新
    • 1.2 关键步骤
    • 1.3 梯度提升树(GBDT)
    • 1.4 常用库
    • 1.5 总结
  • 二、梯度提升在python中的实例
    • 2.1 代码
    • 2.2 代码解释
  • 三、随机森林
    • 3.1 关键特点
      • 3.1.1 集成学习
      • 3.1.2 数据样本的随机性
      • 3.1.3 特征选择的随机性
      • 3.1.4 不需要大量参数调整
      • 3.1.5 抗过拟合能力
    • 3.2 实现步骤
  • 四、随机森林在python中的实例
    • 4.1 代码
    • 4.2 代码解释
  • 五、随机森林和梯度提升的区别
    • 5.1 训练过程
    • 5.2 树的权重和组合
    • 5.3 特征选择
    • 5.4 泛化能力和过拟合
    • 5.5 计算复杂度
    • 5.6 应用场景
    • 5.7 总结

一、梯度提升

在这里插入图片描述

1.1 基本原理

1.1.1 初始化模型

梯度提升算法从一个简单的模型开始,例如一个常数预测器

1.1.2 迭代优化

在每一轮迭代中,算法会训练一个新的模型来拟合残差(实际值与当前模型预测值之间的差异)。通过这种方式,新模型专注于纠正前一个模型的错误

1.1.3 梯度计算

在每一轮迭代中,算法计算损失函数的梯度,这表示损失函数在当前模型预测值处的斜率。梯度指向损失增加最快的方向

1.1.4模型更新

新训练的模型用于更新当前模型,使其在梯度方向上迈出一步,从而减少损失

1.2 关键步骤

  1. 损失函数:选择一个合适的损失函数,例如平方损失(用于回归问题)或对数损失(用于分类问题)
  2. 决策树:梯度提升通常使用决策树作为基学习器。决策树的深度通常较小,以防止过拟合
  3. 负梯度:计算当前模型的负梯度,这表示损失函数下降最快的方向
  4. 拟合残差:使用决策树拟合负梯度,得到一个新模型
  5. 学习率(Shrinkage):对新模型的贡献进行缩放,以防止过拟合。学习率是一个超参数,通常需要通过交叉验证来调整
  6. 模型更新:将新模型添加到当前模型中,以更新预测
  7. 迭代:重复上述步骤,直到达到预定的迭代次数或损失不再显著下降

1.3 梯度提升树(GBDT)

梯度提升树(Gradient Boosting Decision Tree,GBDT)是梯度提升的一种实现,它使用决策树作为基学习器。GBDT在许多机器学习任务中表现出色,尤其是在结构化数据上

1.4 常用库

在Python中,常用的梯度提升库有:

  • XGBoost
  • LightGBM
  • CatBoost
    这些库提供了高效的梯度提升算法实现,并且具有许多优化和特性,使得模型训练更加快速和准确。

1.5 总结

梯度提升是一种强大的机器学习技术,通过迭代地优化模型来提高预测性能。在实际应用中,合理调整超参数和使用先进的梯度提升库可以帮助我们构建高效、准确的模型

二、梯度提升在python中的实例

可以使用Python中的scikit-learn库来实现梯度提升(Gradient Boosting)。我们将使用梯度提升回归器(Gradient Boosting Regressor)来训练一个模型,并用它来预测一些数据

2.1 代码

以下是一个完整的例子,包括数据生成、模型训练和预测:

# 导入所需的库
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_squared_error
# 生成模拟数据
X, y = make_regression(n_samples=1000, n_features=20, noise=0.1, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化梯度提升回归器
gb_regressor = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
# 训练模型
gb_regressor.fit(X_train, y_train)
# 进行预测
y_pred = gb_regressor.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"均方误差: {mse}")
# 打印特征重要性
feature_importances = gb_regressor.feature_importances_
print(f"特征重要性: {feature_importances}")

输出结果:
在这里插入图片描述

2.2 代码解释

  • 首先生成了一个包含1000个样本和20个特征的回归数据集
  • 然后将数据集划分为训练集和测试集,其中测试集占20%
  • 接着创建了一个GradientBoostingRegressor对象,并设置了树的数(n_estimators)、学习率(learning_rate)和树的最大深度(max_depth
  • 使用训练集数据训练模型
  • 使用训练好的模型对测试集进行预测
  • 最后,计算了模型的均方误差,并打印了特征的重要性

三、随机森林

在这里插入图片描述

随机森林能够用于分类和回归任务,并且在许多实际应用中表现出色

3.1 关键特点

3.1.1 集成学习

随机森林是由多个决策树组成的集合,每个树都对数据进行投票(分类任务)或取平均值(回归任务)以产生最终的预测

3.1.2 数据样本的随机性

在构建每棵树时,随机森林从原始数据集中随机抽取一个子集进行训练。这种抽样称为“装袋”(Bagging)

3.1.3 特征选择的随机性

在树的每个节点上,随机森林会从所有特征中随机选择一个子集来决定最佳分割点。这增加了树之间的多样性,有助于提高模型的泛化能力

3.1.4 不需要大量参数调整

随机森林通常不需要复杂的参数调整,这使得它成为一个易于使用且效果不错的算法

3.1.5 抗过拟合能力

由于随机森林结合了多个决策树,每个树都在不同的数据子集上训练,因此它通常能够避免过拟合

3.2 实现步骤

  1. 数据抽样:从原始数据集中进行有放回的随机抽样,得到多个训练子集
  2. 树构建:对于每个训练子集,构建一个决策树。在每个节点上,随机选择特征子集,并找到最佳分割点
  3. 树集成:将所有决策树的预测结果进行汇总。对于分类问题,通常采用多数投票;对于回归问题,通常取平均值

四、随机森林在python中的实例

4.1 代码

以下是一个使用scikit-learn库实现随机森林的简单例子

# 导入所需的库
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
# 加载数据集
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)
# 初始化随机森林分类器
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)
# 训练模型
rf_classifier.fit(X_train, y_train)
# 进行预测
y_pred = rf_classifier.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy}")
# 打印特征重要性
feature_importances = rf_classifier.feature_importances_
print(f"特征重要性: {feature_importances}")

输出结果:
在这里插入图片描述

4.2 代码解释

  • 首先加载了Iris数据集
  • 然后将其划分为训练集和测试集
  • 接着,我们创建了一个RandomForestClassifier对象,并用训练集数据训练了模型
  • 最后,我们评估了模型的准确率并打印了特征的重要性

五、随机森林和梯度提升的区别

梯度提升(Gradient Boosting)和随机森林(Random Forest)都是基于决策树的集成学习算法,但它们在构建集成模型的方式和原理上有显著的不同

5.1 训练过程

  • 梯度提升
    • 采用串行训练方式,每一棵树都是为了纠正前一棵树的错误而训练的
    • 每棵树都是基于残差(实际值与当前模型预测值之间的差异)进行训练的
    • 通过梯度下降在损失函数上迭代优化,逐步构建模型
  • 随机森林
    • 采用并行训练方式,每棵树都是独立地从原始数据集中抽取的子集上进行训练
    • 每棵树的训练不依赖于其他树,它们之间是相互独立的
    • 通过随机选择特征和样本来增加模型的多样性,减少过拟合

5.2 树的权重和组合

  • 梯度提升
    • 每棵树都有不同的权重,这些权重是基于它们减少损失的能力来确定的
    • 最终的预测是所有树预测的加权和
  • 随机森林
    • 所有树在最终预测中的权重是相同的
    • 对于分类问题,通常采用多数投票来决定最终的类别;对于回归问题,通常取所有树预测的平均值

5.3 特征选择

  • 梯度提升
    • 在每个分割点考虑所有特征,选择最佳分割
  • 随机森林
    • 在每个分割点随机选择一个特征子集,并从中选择最佳分割

5.4 泛化能力和过拟合

  • 梯度提升
    • 由于梯度提升专注于减少残差,它可能会对训练数据过度拟合,特别是如果没有适当的正则化或早停机制
  • 随机森林
    • 由于其随机性和独立性,随机森林通常具有较好的泛化能力,对过拟合有一定的抵抗力

5.5 计算复杂度

  • 梯度提升
    • 通常计算成本较高,因为它需要连续地训练多棵树,并且每棵树都要与前一棵树的结果相配合
  • 随机森林
    • 计算成本相对较低,因为树是并行训练的,并且每棵树的训练可以并行化

5.6 应用场景

  • 梯度提升
    • 通常用于需要高预测精度的任务,如广告点击率预测、信用评分等
  • 随机森林
    • 适用于需要快速、稳定预测的场景,如分类问题、特征选择等

5.7 总结

梯度提升和随机森林都是强大的机器学习工具,但它们在模型构建、泛化能力、计算复杂度和适用场景上有所不同。选择哪个算法取决于具体问题的需求、数据特性和性能要求

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java队列详细解释

队列 一、什么是队列(Queue) java队列是一种线性数据结构,它的特点是先进先出。在队列中,元素的添加(入队)操作在队尾进行,而元素的移除(出队)操作则在队头进行。因此&a…

最近大模型最火的就业方向有哪些?

在2023和2024年,大语言模型的发展迎来了绝对风口,吸引了大量创业者和投资者。然而,经过一年的发展,许多公司已经销声匿迹。那么,未来大模型方向上还有哪些可以继续发展的方向呢? 基座大模型预训练 现状 - 展现出“胜…

TikTok Live与跨境电商的深度融合:直播带货引领品牌出海

在TikTok Live的应用中,品牌能够利用这一互动性极强的功能开辟新的销售渠道,推动全球业务的增长。本文Nox聚星将和大家探讨TikTok Live如何与跨境电商相结合,分析其应用场景。 一、TikTok Live与跨境电商的结合优势 庞大的用户基础&#xff…

使用 OpenCV 和 NumPy 进行图像处理:HSV 范围筛选实现PS抠图效果

使用 OpenCV 和 NumPy 进行图像处理:HSV 范围筛选实现PS抠图效果 在计算机视觉和图像处理领域,OpenCV 是一个非常强大的库,能够帮助我们执行各种图像操作。在这篇博客中,我们将通过一个简单的示例演示如何使用 OpenCV 和 NumPy 来…

machine learning - 2

泛化误差 也可以认为是预测时的误差。 训练误差 并不是越小越好,太小会过拟合。 获得测试集合的方法: 1): 2):例如:k-折交叉验证法, 就的每k个数据取一个座位测试集 3&#xff0…

1.39TB高清卫星影像更新(WGS84坐标投影)

最近对WGS84版的高清卫星影像数据进行了一次更新,并基于更新区域生成了相应的接图表。 1.39TB高清卫星影像更新 本次数据更新了1576个离线包,共1.39TB大小,并全部生成了更新接图表。 更新接图表范围 更新接图表由每一个离线包文件的范围构…

rancher upgrade 【rancher 升级】

文章目录 1. 背景2. 下载3. 安装4. 检查5. 测试5.1 创建项目5.2 创建应用5.3 删除集群5.4 注册集群 1. 背景 rancher v2.8.2 升级 v2.9.1 2. 下载 下载charts helm repo add rancher-latest https://releases.rancher.com/server-charts/latest helm repo update helm fetc…

支付宝开放平台-开发者社区——AI 日报「9 月 6 日」

1 3天把Llamaill成Mamba, 性能不降,推理更快! 新智元 丨阅读原文 康奈尔和普林斯顿的研究人员成功将大型Transformer模型Llama提炼成Mamba模型,并设计了新的推测解码算法,显著提高了模型的推理速度。研究团队采用了渐…

Android OpenGLES开发:EGL环境搭建

努力,不是为了要感动谁,也不是要做给哪个人看,而是要让自己随时有能力跳出自己厌恶的圈子,并拥有选择的权利,用自己喜欢的方式过一生! EGL是什么? 谈到openGL开发我们就不得不说EGL&#xff0c…

零基础5分钟上手亚马逊云科技-开发云原生网站应用

简介: 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…

调度台在现代社会中发挥哪些重要作用

在当今这个高度信息化、快节奏的社会中,调度台作为各行各业运行管理的中枢神经,正发挥着日益重要的作用。它不仅是一个物理上的工作平台,更是信息汇聚、指令发出、资源调配的核心节点,对于保障社会正常运转、提升服务效率、应对突…

tkcalendar中的DateEntry

tkcalendar中的DateEntry可进行时间选择,在Python环境中可以直接使用,但是打包过程中,pyinstaller -F -w -i nss.ico xxx.py,DateEntry是用不了,不显示,打包使用pyinstaller -F -w -i nss.ico --hidden-import babel.n…

spring boot(学习笔记第十九课)

spring boot(学习笔记第十九课) Spring boot的batch框架,以及Swagger3(OpenAPI)整合 学习内容: Spring boot的batch框架Spring boot的Swagger3(OpenAPI)整合 1. Spring boot batch框架 Spring Batch是什么 Spring Batch 是一个…

dp练习【4】

最长数对链 646. 最长数对链 给你一个由 n 个数对组成的数对数组 pairs &#xff0c;其中 pairs[i] [lefti, righti] 且 lefti < righti 。 现在&#xff0c;我们定义一种 跟随 关系&#xff0c;当且仅当 b < c 时&#xff0c;数对 p2 [c, d] 才可以跟在 p1 [a, b…

Ubuntu环境的MySql下载安装

下载压缩包 此文章下载的mysql版本位5.7.29 sudo wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.29-1ubuntu18.04_amd64.deb-bundle.tar解压缩 sudo tar -xvf mysql-server_5.7.29-1ubuntu18.04_amd64.deb-bundle.tar命令解释 -x&#xff1a;…

鸿蒙MPChart图表自定义(四)短刻度线

对于图表中的x轴效果&#xff0c;我们有时想要实现如图所示的特定刻度线。若需绘制x轴的短刻度线&#xff0c;我们可以利用现有资源&#xff0c;将原本的网格线稍作修改&#xff0c;只需绘制一条简洁的短线即可达到目的。 具体的方法就是写一个类MyXAxisRender继承自XAxisRend…

【补-网络安全】日常运维(二)终端端口占用排查

文章目录 一、利用ipconfig、netstat 命令行统计二 、策略封禁IP 引言:检查频繁,第一步我们梳理完资产,第二步应该对资产终端进行一个排查,诊断把脉,了解清楚系统的端口占用及开放情况 一、利用ipconfig、netstat 命令行统计 1.先用ipconfig定位该终端的IP地址 2.明确IP地址后…

汇编语言在虚拟机中输出“Hello World!”

1.软件 Nasmide64.exe(李忠老师编写) Fixvhdw64.exe(李忠老师编写) VirtualBox虚拟机(免费 开源) 2.过程 01.Fixvhdw64.exe输入以下代码: mov ax,0xb800 mov ds,ax mov byte [0x00],H mov byte [0x02],e mov byte [0x04],l mov byte [0x06],l mov byte [0x08],o mov byte…

x-cmd pkg | tig - 基于 nucurses 的 git 文本模式界面

目录 简介首次用户快速实验指南功能特点类似工具与竞品进一步探索 简介 tig 由 Jonas Fonseca 于 2006 年使用 C 语言创建的 git 交互式文本命令行工具。旨在开启交互模式快速浏览 git 存储库的信息以及 git 命令的运行。 首次用户快速实验指南 本文的 demo 展现了如何通过 …

2024年高教杯国赛(D题)数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…