机器学习实战8-基于XGBoost和LSTM的台风强度预测模型训练与应用

news2024/9/22 17:35:37

大家好,我是微学AI,今天给大家介绍一下机器学习实战8-基于XGBoost和LSTM的台风强度预测模型训练与应用,今年夏天已经来了,南方的夏天经常会有台风登陆,给人们生活带来巨大的影响,本文主要基于XGBoost模型和长短期记忆(LSTM)模型对台风强度进行了预测。通过具体的代码实台风强度的预测,具有较好的应用价值。
在这里插入图片描述

文章目录结构:

  1. 引言
  2. 台风强度预测模型项目介绍
  3. XGBoost原理
    3.1 XGBoost算法简介
    3.2 XGBoost的主要特点
    3.3 XGBoost的优点和缺点
  4. LSTM原理
    4.1 LSTM算法简介
    4.2 LSTM的主要特点
    4.3 LSTM的优点和缺点
  5. 台风强度预测数据样例
  6. 数据加载与预处理
    6.1 数据加载
    6.2 数据预处理
  7. XGBoost模型训练与预测
    7.1 XGBoost模型训练
    7.2 XGBoost模型预测
  8. LSTM模型训练与预测
    8.1 LSTM模型训练
    8.2 LSTM模型预测
  9. 模型评估与对比分析

1. 引言

随着气候变化的影响,台风对人们的生命、财产以及社会经济带来的影响越来越大。因此,预测台风强度成为了一个非常重要的问题。本文基于XGBoost和LSTM算法,提出了一种台风强度预测模型,通过对历史台风强度数据的分析,可以对未来的台风强度进行预测,为国家和地区的防灾减灾工作提供帮助。

2. 台风强度预测模型项目介绍

在本项目中,我们使用了XGBoost和LSTM两种算法进行台风强度预测。其中,XGBoost是一种集成学习算法,可以通过多个分类器的加权组合来提高预测准确率。LSTM是一种递归神经网络,可以处理序列数据,适用于对时间序列数据进行预测。通过比较这两种算法的预测效果,可以得出哪种算法更适合于台风强度预测的结论。

3. XGBoost原理

3.1 XGBoost算法简介

XGBoost(Extreme Gradient Boosting)是一种集成学习算法,可以通过多个分类器的加权组合来提高预测准确率。XGBoost使用了一种叫做GBDT(Gradient Boosting Decision Tree)的算法,它是一种决策树的集成算法,可以通过不断迭代来提高模型的准确率。在每一次迭代中,GBDT会根据之前预测结果的误差来调整下一棵决策树的参数,从而减小误差,提高预测准确率。

其数学原理可以分为两个部分:加法建模和损失函数优化。

加法建模(Additive Modeling):

XGBoost采用的是加法建模的思想,即通过将多个弱模型迭代地叠加在一起来构建一个强大的整体模型。每次迭代都在现有模型的基础上添加一个新的模型,使得整体模型逐步逼近真实结果。最终的预测结果是所有弱模型的加权和。

损失函数优化:

XGBoost通过优化损失函数来训练模型参数,其中使用了泰勒展开式来逼近损失函数。具体来说,XGBoost采用了二阶泰勒展开式,将损失函数在当前模型参数处进行二阶近似展开,并通过最小化近似损失函数的方式来更新模型参数。这种方法能够更准确地拟合损失函数,从而提高模型性能。
在这里插入图片描述

3.2 XGBoost的主要特点

XGBoost的主要特点如下:

  • 高效:XGBoost在分布式计算中具有优异的效率和可扩展性,可以处理大规模数据。
  • 准确:XGBoost通过集成多个分类器的结果来提高准确率,同时也可以避免过拟合。
  • 灵活:XGBoost支持自定义损失函数和评估指标,可以根据具体问题进行优化。
  • 可解释性:XGBoost能够对模型的特征重要性进行评估,帮助用户理解模型的预测过程。

3.3 XGBoost的优点和缺点

XGBoost的优点和缺点如下:

优点:

  • 高效:XGBoost在处理大规模数据时具有优异的效率和可扩展性。
  • 准确:XGBoost通过集成多个分类器的结果来提高准确率,同时也可以避免过拟合。
  • 灵活:XGBoost支持自定义损失函数和评估指标,可以根据具体问题进行优化。
  • 可解释性:XGBoost能够对模型的特征重要性进行评估,帮助用户理解模型的预测过程。

缺点:

  • 参数调整:XGBoost有很多参数需要调整,需要对算法有深入的了解才能得到最佳的参数设置。
  • 训练时间长:在处理大规模数据时,XGBoost需要较长的训练时间。

4. LSTM原理

4.1 LSTM算法简介

LSTM(Long Short-Term Memory)是一种递归神经网络,可以处理序列数据,适用于对时间序列数据进行预测。LSTM通过引入门控机制来解决传统递归神经网络的梯度消失问题,可以处理长序列数据,并可以学习长期依赖关系。
在这里插入图片描述
LSTM网络具体内容可以查看:
人工智能(Pytorch)搭建模型2-LSTM网络实现简单案例

4.2 LSTM的主要特点

LSTM的主要特点如下:

  • 长短期记忆:LSTM通过引入门控机制,可以记忆较长时间的信息,有助于处理长序列数据。
  • 梯度消失问题:LSTM引入门控机制,可以避免传统递归神经网络的梯度消失问题。
  • 可解释性:LSTM可以对模型的预测过程进行解释,有助于理解模型的预测结果。

4.3 LSTM的优点和缺点

LSTM的优点和缺点如下:

优点:

  • 可处理长序列数据:LSTM通过引入门控机制,可以记忆较长时间的信息,有助于处理长序列数据。
  • 避免梯度消失问题:LSTM引入门控机制,可以避免传统递归神经网络的梯度消失问题。
  • 可解释性:LSTM可以对模型的预测过程进行解释,有助于理解模型的预测结果。

缺点:

  • 训练时间长:LSTM在处理大规模数据时需要较长的训练时间。
  • 参数调整:LSTM有很多参数需要调整,需要对算法有深入的了解才能得到最佳的参数设置。

5. 台风强度预测数据样例

本项目使用台风强度的csv数据,数据如下所示:

Date,Lat,Lon,Wind,Pres,Center
202006010000,20,120,25,1008,0
202006010600,20.2,120.3,30,1004,0
202006011200,20.5,120.6,35,1000,0
202006011800,21,121,40,996,0
202006020000,21.5,121.5,45,992,0
202006020600,22,122,50,990,0
202006021200,22.5,123,55,988,0
202006021800,23,124,60,984,0
202006030000,23.5,125,65,980,0
202006030600,24,126,70,975,0
202006031200,25,128,75,965,0
202006031800,25,129,80,950,0

该数据包含了每个台风的日期、时间、经纬度、风速、气压等信息。

6. 数据加载与预处理

6.1 数据加载

我们使用Pandas库来加载csv格式的数据。代码如下:

import pandas as pd

# 加载数据
data = pd.read_csv('data.csv')

6.2 数据预处理

在预测之前,我们需要对数据进行预处理。具体来说,我们需要将日期和时间列合并为一个时间戳,同时对经纬度进行归一化处理。代码如下:

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

# 加载数据
data = pd.read_csv('data.csv')

# 将日期和时间列合并为一个时间戳
data['Timestamp'] = pd.to_datetime(data['Date'].astype(str) + data['Time'].astype(str), format='%Y%m%d%H%M')

# 对经纬度进行归一化处理
scaler = MinMaxScaler()
data[['Lat', 'Lon']] = scaler.fit_transform(data[['Lat', 'Lon']])

7. XGBoost模型训练与预测

7.1 XGBoost模型训练

我们使用XGBoost库来训练模型。代码如下:

from xgboost import XGBRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data[['Lat', 'Lon', 'Pres']], data['Wind'], test_size=0.2, random_state=42)

# 训练XGBoost模型
xgb = XGBRegressor(n_estimators=1000, learning_rate=0.01, random_state=42)
xgb.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = xgb.predict(X_test)

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f'MSE: {mse}')

7.2 XGBoost模型预测

我们使用训练好的XGBoost模型来进行预测。代码如下:

# 对新数据进行预测
new_data = pd.DataFrame({'Lat': [0.5], 'Lon': [0.5], 'Pres': [1000]})
new_data_pred = xgb.predict(new_data)
print(f'New data prediction: {new_data_pred}')

8. LSTM模型训练与预测

8.1 LSTM模型训练

我们使用pytorch框架来训练LSTM模型。代码如下:


import torch
import torch.nn as nn
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split

# 加载数据
data = pd.read_csv('data.csv')

# 提取特征和目标值
features = data[['Lat', 'Lon', 'Pres', 'Center']].values
target = data[['Wind']].values

# 数据归一化
scaler = MinMaxScaler()
scaled_features = scaler.fit_transform(features)
scaled_target = scaler.fit_transform(target)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(scaled_features, scaled_target,
                                                    test_size=0.2, random_state=42)

# 转换为PyTorch张量
X_train_tensor = torch.Tensor(X_train).unsqueeze(1)
y_train_tensor = torch.Tensor(y_train).unsqueeze(1)
X_test_tensor = torch.Tensor(X_test).unsqueeze(1)
y_test_tensor = torch.Tensor(y_test).unsqueeze(1)


# 定义LSTM模型
class LSTM(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, output_size):
        super(LSTM, self).__init__()
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(device)
        c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(device)
        out, _ = self.lstm(x, (h0, c0))
        out = self.fc(out[:, -1, :])
        return out


# 定义模型参数
input_size = 4  # 输入特征维度
hidden_size = 32  # 隐藏层维度
num_layers = 2  # LSTM层数
output_size = 1  # 输出维度

# 实例化模型
model = LSTM(input_size, hidden_size, num_layers, output_size)

# 设置设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

# 训练模型
num_epochs = 100
for epoch in range(num_epochs):
    model.train()
    outputs = model(X_train_tensor.to(device))
    loss = criterion(outputs, y_train_tensor.to(device))
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if (epoch + 1) % 10 == 0:
        print(f'Epoch: {epoch + 1}/{num_epochs}, Loss: {loss.item():.6f}')

8.2 LSTM模型预测

我们使用训练好的LSTM模型来进行预测。代码如下:

# 使用模型进行预测
new_data = [[24.5, 127.5, 975, 0]]  # 待预测的新数据

model.eval()
with torch.no_grad():
    prediction = model(torch.Tensor(new_data).unsqueeze(0).to(device))
    unscaled_prediction = scaler.inverse_transform(prediction.cpu().numpy())
    print(f'Wind Speed Prediction for New Data: {unscaled_prediction[0][0]:.2f}')

运行结果:

Epoch: 10/100, Loss: 0.147660
Epoch: 20/100, Loss: 0.122539
Epoch: 30/100, Loss: 0.099956
Epoch: 40/100, Loss: 0.082207
Epoch: 50/100, Loss: 0.073938
Epoch: 60/100, Loss: 0.074107
Epoch: 70/100, Loss: 0.073730
Epoch: 80/100, Loss: 0.073326
Epoch: 90/100, Loss: 0.073319
Epoch: 100/100, Loss: 0.073234
Wind Speed Prediction for New Data: 67.60

9. 模型评估与对比分析

我们通过计算均方误差来评估模型预测的准确性,并对比分析XGBoost模型和LSTM模型的预测表现。

在本例中,LSTM模型的均方误差为0.073234。从均方误差的结果来看,LSTM模型的性能优于XGBoost模型。

然而,需要注意的是,评估模型的性能仅仅使用均方误差是不够的,因为它并不能完全反映模型的表现。在实际应用中,我们需要综合考虑多种评估指标,如准确率、召回率、F1值等。

此外,在选择模型时,还需要考虑数据的特点和应用场景。例如,如果数据具有时序性质,那么LSTM模型可能更适合;如果数据具有稀疏性质,那么XGBoost模型可能更适合。

因此,在实际应用中,我们需要综合考虑多种因素来选择合适的模型,并不断优化模型的性能,以达到最好的预测效果。

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

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

相关文章

Python3 错误和异常 | 菜鸟教程(十五)

目录 一、简述 二、语法错误 三、异常 四、异常处理 (一)try/except 1、异常捕捉可以使用 try/except 语句。 2、以下例子中,让用户输入一个合法的整数,但是允许用户中断这个程序(使用 Control-C 或者操作系统提供…

ChatGPT从入门到精通学习路线

课程名称适应人群 ChatGPT从入门到精通,一站式掌握办公自动化/爬虫/数据分析和可视 点击上述名称,学习完整视频 全面AI时代就在转角,道路已经铺好了“局外人”or“先行者”就在此刻等你决定 1、对ChatGPT感兴趣并希望有人手把手教学的新手 …

apex/amp 安装问题解决

如何安装: 首先 pip uninstall apex卸载、apex文件夹也删除, 重新安装,具体安装步骤如下: git clone https://www.github.com/nvidia/apex cd apex python setup.py install --cuda_ext --cpp_ext 只要出现了下面的语句就是完成…

人工智能数学基础2:利用SciPy中的数值积分常用函数求定积分

利用SciPy中的数值积分常用函数求定积分 21/82.625 方法一:在 SciPy 库中,可以使用 quad 函数来进行数值积分。具体实现代码如下: from scipy.integrate import quaddef integrand(x):return x**2 1/x**4 # 定义被积函数result, error q…

vue+leaflet笔记之地图卷帘

vueleaflet笔记之地图卷帘 本文介绍了Web端使用Leaflet开发库实现地图卷帘效果的方法 (底图来源:中科星图),结合leaflet-side-by-side插件可以快速简单地实现地图分屏对比效果 ,示例效果如下图所示。 开发环境 Vue开发库:3.2.37 & Leaf…

FPGA-DFPGL22学习5-VERILOG

系列文章之 上章 FPGA-DFPGL22学习4-仿真平台学习 文章目录 系列文章之 上章前言一、Verilog 简介二、Verilog基础1.逻辑值2.进制3.标识符4.数据类型寄存器类型线网类型参数类型 5.运算符 三、Verilog 程序框架1.注释2.关键字3.程序框架 四、Verilog 程序语句1.结构语句2.赋值…

微信小程序+SpringBoot接入后台服务,接口数据来自后端

前言 前两天开发了一个微信小程序项目,只不过接口数据是自己设置的假数据。然后我就想将这些假数据替换掉。这些数据来自接口,之前做过前后端分离的项目,我就想能不能直接调用那些后端数据接口。结果是可以的。以下是自己编写的部分方法 步骤…

卷积神经网络--猫狗系列之下载、导入数据集

(由于是学习,所以文章会有一些报错及解决办法) 在Kaggle()获取数据集:(没有账号先去注册一个账号,在注册时可能会出现的问题见Kaggle注册出现一排“Captcha must be filled out.”!) https://www.kaggle.…

DOM编程事件与简单编程

文章目录 事件绑定绑定式事件监听方法event 事件对象client、offsetkeyCode 键盘事件事件冒泡阻止浏览器默认行为 DOM编程用户名输入框长度限制鼠标移入移出复选框全选DOM编程实现动态时钟第一种:第二种:第三种: 事件绑定 DOM编程中的事件&a…

excel只显示想要的内容

是 后面的FG等列是不需要的,选择F列,ctrl shift 右箭头 。选中后隐藏。

Ansible创建逻辑卷

Ansible创建逻辑卷: 环境准备: 清单文件: [dev] 192.168.110.129 [prod] 192.168.110.132 [all:vars] ansible_userroot ansible_passwordredhat磁盘准备: 在一台主机上添加一块sata接口的磁盘,一块不添加。 192.…

Linux--获取一长串目录的结构指令:tree

注意:这个tree指令不是Linux自带的,需要下载 yum install -y tree (-y的作用是免确定) 示例:

UE5 读写本地JSON,发送HTTP请求(get)

UE5 读写本地JSON,发送HTTP请求(get) 没有使用插件,就用UE提供的库开发(推荐使用插件VaRest在虚幻商城里有) PCHUsage PCHUsageMode.UseExplicitOrSharedPCHs;PublicDependencyModuleNames.AddRange(new …

win10 编译hadoop源码报错

报错信息: 信息: 用提供的模式无法找到文件。 "devenv command was not found. Verify your compiler installation level."解决方案 右键,以管理员身份打开 之后再次执行mvn 命令即可. 也可以再打开的时候先执行一下命令: dev…

数字化是信息化的升级吗?数字化信息化这两者有什么联系和区别?

也可以这样说吧,但总是太抽象,不准确的,两者还是有很大区别的。 首先来看信息化、数字化具体是什么意思 想要明白两者之间的差异,首先要搞清楚他们的出处—— 所谓信息化、数字化还有现在提很多的智能化,其实都是从…

如何免费将springboot+vue项目部署上线(云服务器+宝塔面板)

本文整个流程是在博主完成一次项目上线全过程后复盘的记录,有没有写到的细节不清楚的可以私聊提问,这里选用的是阿里云服务器,阿里云对学生用户可以免费使用一个月服务器,不定期也有活动,我白嫖了7个月服务器&#xff…

ZYNQ——脉宽调制之呼吸灯实现

文章目录 原理简介实验代码软件仿真板上验证 原理简介 呼吸灯的实现过程就是把不同占空比的脉冲输出后加在LED上,LED灯就会显示不同的亮度,通过不断地调节方波的占空比,LED灯的亮度也会跟着变化,看起来就像是“呼吸”一样。 要得…

陪诊小程序系统|陪诊软件开发|陪诊系统功能和特点

随着医疗服务的逐步改善和完善,越来越多的人群开始走向医院就诊,而其中不少人往往需要有人陪同前往,这就导致了许多矛盾与问题的发生,比如长时间等待、找不到合适的陪诊人员等。因此为人们提供一种方便快捷的陪诊服务成为了一种新…

如何挽救误剪切的TF卡数据 ?三招救援

在日常使用TF卡过程中,我们可能会遇到误操作导致数据被剪切并丢失的情况。这无疑给我们带来了困扰,因为我们可能丢失了重要的照片、视频、文档等文件。然而,不必过于担心,因为TF卡数据剪切后的恢复仍然有希望。本文将向您介绍几种…

基于DeepLabv3Plus开发构建人脸人像分割系统

在图像分割领域中有不少优秀出色的网络,DeepLab系列就是其中非常经典的分支之一,在之前的很多项目中陆续都已经有接触到了,在处理图像分割中表现出色。 DeepLabV3Plus是一种用于语义分割任务的深度学习模型,它是DeepLab系列模型的…