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

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

时间:2024-09-05 19:52:19浏览次数:14  
标签:训练 梯度 模型 提升 test 森林 随机

引言

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

文章目录

一、梯度提升

在这里插入图片描述

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 总结

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

标签:训练,梯度,模型,提升,test,森林,随机
From: https://blog.csdn.net/m0_49243785/article/details/141934690

相关文章

  • SVI pyro 随机变分推理的提示和技巧 ,贝叶斯神经网络 bnn pytorch python
    SVI第四部分:提示和技巧¶pyro.ai/examples/svi_part_iv.html导致这一个的三个SVI教程(第一部分, 第二部分,& 第三部分)通过使用Pyro做变分推断所涉及的各个步骤。在这个过程中,我们定义了模型和指南(即,变分分布),设置了变分目标(特别是埃尔博斯),以及构造的优化器(pyro.opti......
  • 《商用密码随机抽查事项清单》要点解读与应对策略
    近期,国家密码管理局发布了《商用密码随机抽查事项清单(2024年版)》公告,抽查类别包括商用密码检测和商用密码应用、电子认证服务使用密码、电子政务电子认证服务。其中抽查清单序号3的抽查类别为商用密码应用与应用安全息息相关,要求使用国密算法(SM1、SM2、SM3、SM4、SM7、SM9、ZU......
  • 优化采样参数提升大语言模型响应质量:深入分析温度、top_p、top_k和min_p的随机解码策
    当向大语言模型(LLM)提出查询时,模型会为其词汇表中的每个可能标记输出概率值。从这个概率分布中采样一个标记后,我们可以将该标记附加到输入提示中,使LLM能够继续输出下一个标记的概率。这个采样过程可以通过诸如temperature和top_p等参数进行精确控制。但是你是否曾深入思......
  • 5.科学计算模块Numpy(2)随机数的生成和ndarray属性及其创建方式
    引言通过上一篇4.科学计算模块Numpy(1)概述与初始操作-CSDN博客,我们已经了解了Numpy的概念和Numpy数组的创建,今天我们来介绍一下Numpy模块中随机数的生成和ndarray属性及其创建方式。通过阅读本篇博客,你可以:1.掌握如何使用numpy.random模块生成随机数2.了解ndarray数组的属性......
  • pbootcms文章或者产品设置范围随机增加访客阅读量
    要在PbootCMS中修改文章的默认访问量,使其在添加文章时设置一个随机访问数,可以按照以下步骤操作:找到并修改 ContentController.php 文件。添加随机访问数代码。更新访问量字段。修改步骤1.找到并修改 ContentController.php 文件打开文件 apps/admin/controller/co......
  • 【重点必读】|《商用密码随机抽查事项清单》要点解读与应对策略
    近期,国家密码管理局发布了《商用密码随机抽查事项清单(2024年版)》公告,抽查类别包括商用密码检测和商用密码应用、电子认证服务使用密码、电子政务电子认证服务。其中抽查清单序号3的抽查类别为商用密码应用与应用安全息息相关,要求使用国密算法(SM1、SM2、SM3、SM4、SM7、SM9、ZUC等),并......
  • 随机森林分类模型 0基础小白也能懂(附代码)
    随机森林分类模型原文链接啥是随机森林随机森林是一种由决策树构成的(并行)集成算法,属于Bagging类型,通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能,同时也有很好的稳定性,广泛应用在各种业务场景中。随机森林有如此优良的表现,主要归......
  • 【路径规划】在二维环境中快速探索随机树和路径规划的示例
    摘要本文介绍了快速探索随机树(Rapidly-exploringRandomTree,RRT)算法在二维环境中的路径规划应用。RRT是一种随机采样算法,能够快速构建从起点到目标点的路径,特别适用于复杂环境中的机器人路径规划。通过在随机方向上扩展树结构,RRT算法能够高效避开障碍物并找到一条可行路径......
  • uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款
    sumer-alipay介绍uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款等功能,界面漂亮颜值高,视频商城小工具等,蚂蚁森林种树养鸡农场偷菜样样齐用于视频,商城,直播,聊天,等等场景完全开源无任何代码加密使用Hbuilder导入插件即可使用。无后......
  • 最优化(13):近似点梯度法、Nesterov算法
    6.1  近似点梯度法        6.1.1 邻近算子(proximaloperator):主要介绍proximaloperator的相关定义和性质        6.1.2  近似点梯度法:给出了proximalgradientmethod算法框架        6.1.3 应用举例:LASSOproblem和Low-rankmatrixcomp......