梯度提升回归树模型

梯度提升回归树(Gradient Boosting Regression Trees, GBRT)是一种集成学习方法,通过结合多个弱学习器(通常是决策树)的预测结果来提高整体模型的性能。GBRT特别擅长处理回归问题和分类问题,具有较高的预测准确性。

GBRT 的工作原理

  1. 初始化模型:用训练数据的均值初始化模型的预测值。

  2. 构建残差模型:对于每一轮迭代,计算当前模型的残差,即实际值与当前模型预测值之间的差异。

  3. 训练弱学习器:用残差训练一个新的决策树(弱学习器),使其能够拟合残差。

  4. 更新模型:将新训练的决策树的预测值加权加入当前模型中,更新后的模型是之前模型和新树预测值的加权和。

  5. 重复迭代:重复步骤2到4,直到达到预定的迭代次数或其他停止条件(如残差足够小)。

GBRT 的优点

  1. 高准确性:通过多个弱学习器的集成,GBRT通常具有较高的预测准确性。
  2. 灵活性:可以处理不同类型的数据(回归和分类),并且可以使用不同类型的损失函数。
  3. 处理非线性关系:由于每个弱学习器都是决策树,GBRT能够很好地处理特征和目标变量之间的非线性关系。

GBRT 的缺点

  1. 计算成本高:训练时间较长,尤其是迭代次数较多时。
  2. 参数调优复杂:GBRT有很多参数需要调整,如迭代次数、树的深度、学习率等,调优过程复杂。
  3. 不易并行化:由于每一轮的训练依赖于前一轮的结果,因此不易并行化处理。

实现 GBRT 的步骤

以 Python 中的 scikit-learn 库为例,下面是实现梯度提升回归树模型的代码示例:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_squared_error# 假设数据已经加载为df
# df = pd.read_csv('data.csv')  # 替换为实际数据加载代码# 性别转换为数值
df['性别'] = df['性别'].map({'男': 0, '女': 1})# 计算配速等特征
def calculate_pace(time1, time2):t1 = pd.to_datetime(time1)t2 = pd.to_datetime(time2)delta = (t2 - t1).total_seconds()return deltasegments = ['起点:庆典广场过线时间', 'U1:二道营过线时间', 'U2:转枝莲过线时间', 'U3:东坪过线时间', 'U4:桦林子过线时间', 'U5:多乐美地过线时间', 'U6:太舞滑雪小镇进站过线时间', 'U6:太舞滑雪小镇出站过线时间', 'U7:雪如意过线时间', 'U8:和平驿站过线时间', 'U9:翠云山顶餐厅过线时间', 'U10:云顶滑雪公园进站过线时间', 'U10:云顶滑雪公园出站过线时间', 'U11:万龙滑雪场过线时间', 'U12:诗柏•云酒店过线时间', 'U13:东梁底过线时间', 'U14:阿那亚崇礼过线时间', 'W1翠云山银河滑雪场星芒餐厅', '终点:庆典广场过线时间']# 计算各段配速
for i in range(len(segments) - 1):df[f'配速_{i+1}'] = df.apply(lambda row: calculate_pace(row[segments[i]], row[segments[i+1]]), axis=1)# 总里程(假设每段距离为1公里)
df['总里程'] = len(segments) - 1# 计算总平均配速
df['总平均配速'] = df[[f'配速_{i+1}' for i in range(len(segments) - 1)]].mean(axis=1)# 计算总配速均差
df['总配速均差'] = df[[f'配速_{i+1}' for i in range(len(segments) - 1)]].std(axis=1)# 计算最大配速和最小配速
df['最大配速'] = df[[f'配速_{i+1}' for i in range(len(segments) - 1)]].max(axis=1)
df['最小配速'] = df[[f'配速_{i+1}' for i in range(len(segments) - 1)]].min(axis=1)# 计算配速均方差
df['配速均方差'] = df[[f'配速_{i+1}' for i in range(len(segments) - 1)]].apply(np.var, axis=1)# 目标变量
df['净计时成绩'] = pd.to_datetime(df['净计时成绩'], format='%H:%M:%S').apply(lambda x: x.hour * 3600 + x.minute * 60 + x.second)# 特征选择
features = ['年龄', '性别', '总里程', '总平均配速', '总配速均差', '最大配速', '最小配速', '配速均方差']
X = df[features]
y = df['净计时成绩']# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 模型训练
model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')

解释

  1. 数据预处理和特征提取

    • 将性别转换为数值。
    • 计算各段配速和其他特征。
    • 将净计时成绩转换为秒数。
  2. 训练模型

    • 将数据分为训练集和测试集。
    • 使用GradientBoostingRegressor进行模型训练。
    • 进行预测并评估模型性能。

通过上述步骤,我们可以使用梯度提升回归树模型进行马拉松成绩预测。GBRT模型能够处理复杂的非线性关系,且具有较高的预测准确性。

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

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

相关文章

黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day4 重置版 全网最全最快

你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ gitee https://gitee.com/Qiuner 🌹 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 想看更多 那就点个关注吧 我会…

UniCAVE实现融合输出或多屏输出

介绍 CAVE沉浸式系统包含单主机多屏和多主机多屏两种系统架构。此文档主要介绍融合输出与单机多屏输出,这两种方式都属于单主机多屏。均以使用UniCAVE输出到前左右下为例。引用的Package为UniCAVE2019。 融合输出 实现原理 (猜测)是将多块…

2024春秋杯网络安全联赛夏季赛Crypto(AK)解题思路及用到的软件

2024春秋杯网络安全联赛夏季赛Crypto(AK) 2024春秋杯网络安全联赛夏季赛Crypto解题思路以及用到的软件 所有题用到的软件 1.vm(虚拟机kali)和Ubuntu,正常配置即可B站有很多。 2.Visual Studio Code(里面要配置python,crypto库和Sagemath数学软件系统S…

Mono.fromRunnable 和 Mono.zip 的详细解释和示例

Mono.fromRunnable Mono.fromRunnable 是一种创建 Mono 的方式,它接受一个 Runnable 作为参数。当 Mono 订阅者订阅时,Runnable 会被执行。Mono.fromRunnable 不会发出任何值,只会执行 Runnable 的逻辑,并在完成后发出一个完成信…

基于微信小程序+SpringBoot+Vue的青少年科普教学系统平台(带1w+文档)

基于微信小程序SpringBootVue的青少年科普教学系统平台(带1w文档) 基于微信小程序SpringBootVue的青少年科普教学系统平台(带1w文档) 这个工具就是解决上述问题的最好的解决方案。它不仅可以实时完成信息处理,还缩短高校教师成果信息管理流程,使其系统化…

LINUX之MMC子系统分析

目录 1. 概念1.1 MMC卡1.2 SD卡1.3 SDIO 2. 总线协议2.1 协议2.2 一般协议2.3 写数据2.4 读数据2.5 卡模式2.5.1 SD卡模式2.5.2 eMMC模式 2.6 命令2.6.1 命令类2.6.2 详细命令 2.7 应答2.8 寄存器2.8.1 OCR2.8.2 CID2.8.3 CSD2.8.4 RCA2.8.5 扩展CSD 3. 关键结构3.1 struct sdh…

数学建模(7)——Logistic模型

一、马尔萨斯人口模型 import numpy as np import matplotlib.pyplot as plt# 初始人口 N0 100 # 人口增长率 r 0.02 # 时间段(年) t np.linspace(0, 200, 200)# 马尔萨斯人口模型 N N0 * np.exp(r * t)# 绘图 plt.plot(t, N, labelPopulation) plt.…

6、基于Fabirc 2.X 通用电子存证系统部署

evidence 将GOPATH设置为/root/go,拉取项目: cd $GOPATH/src && git clone https://gitee.com/henan-minghua_0/evidence.git 在/etc/hosts中添加: 127.0.0.1 orderer.example.com 127.0.0.1 peer0.org1.example.com 127.0.0.1 peer1.org…

【数据结构】堆的实现以及建堆算法和堆排序

【数据结构】堆的实现以及建堆算法和堆排序 🔥个人主页:大白的编程日记 🔥专栏:数据结构 文章目录 【数据结构】堆的实现以及建堆算法和堆排序前言一.堆的实现1.1 堆数据的插入1.2堆数据的删除 二.建堆算法和堆排序2.1思路分析2.…

java的转义字符,注释和代码规范

目录 1.Java运行机制 Java开发快速入门 Java开发注意事项和细节说明 Java学习方法 2.Java的转义字符 Java常用的转义字符 代码示例: 转义字符练习 3.初学java易犯错误 4.注释(comment) 单行注释与多行注释 文档注释 5.Java代码规…

Spark轨迹大数据处理_scalaSpark代码实两个GIS点(经纬度点)之间的方位角计算

终于有时间来搞一搞这个专栏了 首先声明一下 1、我这个代码是基于一个简化方位角模型,忽略了地球的曲率,适用于距离相对较短的距离。因为业务相关,这个方位角两个点的距离计算不会超过1000km。 2、我这个方位角的计算逻辑:是从一…

使用Top进行设备性能分析思路

Top命令 像windows一样,linux也有一个“进程管理”,可以在命令行执行 top ,就可以整体的查看当前机器的资源及进程情况。 在性能问题中,Top是使用较多的一个命令,一般用它可以从整体上了解系统的CPU、内存、IO情况&am…

MongoDB教程(十七):MongoDB主键类型ObjectId

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、Object…

【状态机动态规划 状态压缩】1434. 每个人戴不同帽子的方案数

本文涉及知识点 位运算、状态压缩、枚举子集汇总 动态规划汇总 LeetCode 1434. 每个人戴不同帽子的方案数 总共有 n 个人和 40 种不同的帽子,帽子编号从 1 到 40 。 给你一个整数列表的列表 hats ,其中 hats[i] 是第 i 个人所有喜欢帽子的列表。 请你…

建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书

近日,经欧拉生态创新中心和华为技术有限公司测评,建投数据自主研发的人力资源管理系统、招聘管理系统、绩效管理系统、培训管理系统,完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920(Taisha 200)的兼容性…

ASP.NET MVC

ASP.NET MVC与.NET Framework关系 .NET Framework是一个庞大的代码库,能为多种编程语言提供支持(如C#、VB、F#等)。同时.NET Framework 提供了多种技术框架,ASP.NET MVC是.NET Framework提供的众多技术框架中的一种,用于开发Web应用。 .NET …

B端:小小详情页蕴藏大学问,附大量案例 。

在B端(Business-to-Business,即企业与企业之间的商业模式)的设计中,详情页是一个非常重要的环节。虽然它可能看起来只是一个简单的页面,但实际上其中蕴藏着许多大学问。 用户需求与体验: 在B端设计中&…

【微信小程序】wx.navigateTo传参时不能使用const定义的数据类型

2024年7月21日更新 今日调试时发现似乎是因为使用vant-weapp时按照官方提示关闭了style:"v2"导致的此情况,打开之后无法复现该内容,特此提示。 以下是原内容 如题,笔者测试了好久才找到这个bug,想传递的数据是this.d…

QT老版本下载指南

由于某些原因,qt限制ip了,老版本打开时提示:Download from your IP address is not allowed,如果你会爬梯子,那你肯定可以看到滤掉了的内容(包括文件、子文件夹等)。 当然顺便说一下&#xff0c…

【Docker】Docker-consul容器服务自动发现与注册

目录 一.Consul概述 1.解决了什么问题 2.什么叫微服务或者注册与发现 3.consul的模式 4.相关命令 二.consul 部署 1.consul服务器部署 2.部署docker容器 3.Nginx负载均衡器 3.1.安装启动nginx 3.2.配置nginx负载均衡 3.3.创建配置consul complate模板文件 3.4.添加…