R 2火灾温度预测

火灾温度预测

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

使用LSTM进行时间序列预测

这周学习如何使用长短期记忆网络(LSTM)进行时间序列预测。使用PyTorch框架来构建和训练模型,基于一个包含温度、CO浓度以及烟灰浓度的数据集。

1. 数据预处理

首先,需要对数据进行预处理。数据集中的特征包括温度(Tem1)、CO浓度(CO 1)、以及烟灰浓度(Soot 1)。我们将这些特征标准化,并构建输入序列X和目标值y

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import MinMaxScalerdata = pd.read_csv("woodpine2.csv")plt.rcParams['savefig.dpi'] = 500  # 图片像素
plt.rcParams['figure.dpi'] = 500  # 分辨率fig, ax = plt.subplots(1, 3, constrained_layout=True, figsize=(14, 3))sns.lineplot(data=data["Tem1"], ax=ax[0])
sns.lineplot(data=data["CO 1"], ax=ax[1])
sns.lineplot(data=data["Soot 1"], ax=ax[2])
plt.show()# 数据归一化
dataFrame = data.iloc[:, 1:].copy()
sc  = MinMaxScaler(feature_range=(0, 1))for i in ['CO 1', 'Soot 1', 'Tem1']:dataFrame[i] = sc.fit_transform(dataFrame[i].values.reshape(-1, 1))width_X = 8
width_y = 1# 构建输入序列X和目标值y
X = []
y = []in_start = 0for _, _ in data.iterrows():in_end = in_start + width_Xout_end = in_end + width_yif out_end < len(dataFrame):X_ = np.array(dataFrame.iloc[in_start:in_end, ])y_ = np.array(dataFrame.iloc[in_end:out_end, 0])X.append(X_)y.append(y_)in_start += 1X = np.array(X)
y = np.array(y).reshape(-1, 1, 1)
2. 构建LSTM模型

接下来,使用PyTorch构建一个两层的LSTM模型。模型输入为前8个时间步的Tem1CO 1Soot 1数据,输出为第9个时间步的Tem1值。

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.utils.data import TensorDataset, DataLoaderclass model_lstm(nn.Module):def __init__(self):super(model_lstm, self).__init__()self.lstm0 = nn.LSTM(input_size=3, hidden_size=320,num_layers=1, batch_first=True)self.lstm1 = nn.LSTM(input_size=320, hidden_size=320,num_layers=1, batch_first=True)self.fc0 = nn.Linear(320, 1)def forward(self, x):out, hidden1 = self.lstm0(x)out, _ = self.lstm1(out, hidden1)out = self.fc0(out)return out[:, -1:, :]
3. 模型训练

使用均方误差(MSE)作为损失函数,并采用随机梯度下降(SGD)优化器。训练过程中,我们会记录训练损失和测试损失,并绘制其变化曲线。

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model_lstm().to(device)
loss_fn = nn.MSELoss()
opt = torch.optim.SGD(model.parameters(), lr=1e-1, weight_decay=1e-4)
epochs = 50
train_loss = []
test_loss = []
lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(opt, epochs)def train(train_dl, model, loss_fn, opt, lr_scheduler=None):size = len(train_dl.dataset)num_batches = len(train_dl)train_loss = 0for x, y in train_dl:x, y = x.to(device), y.to(device)pred = model(x)loss = loss_fn(pred, y)opt.zero_grad()loss.backward()opt.step()train_loss += loss.item()if lr_scheduler is not None:lr_scheduler.step()train_loss /= num_batchesreturn train_lossdef test(dataloader, model, loss_fn):num_batches = len(dataloader)test_loss = 0with torch.no_grad():for x, y in dataloader:x, y = x.to(device), y.to(device)y_pred = model(x)loss = loss_fn(y_pred, y)test_loss += loss.item()test_loss /= num_batchesreturn test_lossfor epoch in range(epochs):model.train()epoch_train_loss = train(train_dl, model, loss_fn, opt, lr_scheduler)model.eval()epoch_test_loss = test(test_dl, model, loss_fn)train_loss.append(epoch_train_loss)test_loss.append(epoch_test_loss)template = ('Epoch:{:2d}, Train_loss:{:.5f}, Test_loss:{:.5f}')print(template.format(epoch + 1, epoch_train_loss, epoch_test_loss))plt.figure(figsize=(5, 3), dpi=120)
plt.plot(train_loss, label='LSTM Training Loss')
plt.plot(test_loss, label='LSTM Validation Loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.show()
4. 预测与评估

最后,使用训练好的模型对测试集进行预测,并计算模型的均方根误差(RMSE)和决定系数(R²)。

# 预测并将数据移回 CPU 进行逆变换
predicted_y_lstm = sc.inverse_transform(model(X_test).detach().cpu().numpy().reshape(-1, 1))
y_test_1 = sc.inverse_transform(y_test.reshape(-1, 1))# 转换为列表形式
y_test_one = [i[0] for i in y_test_1]
predicted_y_lstm_one = [i[0] for i in predicted_y_lstm]# 绘制真实值和预测值
plt.figure(figsize=(5, 3), dpi=120)
plt.plot(y_test_one[:2000], color='red', label='真实值')
plt.plot(predicted_y_lstm_one[:2000], color='blue', label='预测值')
plt.title('预测结果对比')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()from sklearn import metrics
RMSE_lstm = metrics.mean_squared_error(predicted_y_lstm_one, y_test_1) ** 0.5
R2_lstm = metrics.r2_score(predicted_y_lstm_one, y_test_1)print('均方根误差: %.5f' % RMSE_lstm)
print('R2: %.5f' % R2_lstm)
5.结果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

总结

这周学习了如何使用LSTM模型进行时间序列预测,并掌握数据预处理、模型构建、训练、预测及模型评估的全流程,对lstm模型的使用有了初步了解。

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

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

相关文章

捷途山海T2:混动技术,省钱驾驶新体验

在今日的汽车市场中&#xff0c;消费者的选择已经远远超出了传统的燃油车的范畴。随着节能、环保及用车成本等问题的逐渐凸显&#xff0c;人们开始寻找更加高效且环保的出行方式。在这一背景下&#xff0c;捷途山海T2作为一款搭载了高效混动系统的汽车&#xff0c;以其出色的节…

《机器学习》 贝叶斯分类器 原理、参数讲解及代码演示

目录 一、贝叶斯算法 1、简介 2、贝叶斯算法具有以下特点&#xff1a; 二、贝叶斯原理 1、正向概率&#xff08;先验概率&#xff09; 例如&#xff1a; 2、逆向概率&#xff08;后验概率&#xff09; 3、公式 1&#xff09;实例1 2&#xff09;实例2 • 目标&#x…

轻松获得ADSL代理服务

ADSL 代理服务接入常见问答 在当今激烈的网络爬虫与反爬虫斗争中&#xff0c;各大网站和应用程序采取的风险管理手段愈加严格&#xff0c;其中最常见的一种措施是 IP 封禁。 为了有效应对 IP 封禁带来的挑战&#xff0c;设置代理服务成为一种非常有效的解决方案。配置完代理后…

【计算机网络】电路交换、报文交换、分组交换

电路交换&#xff08;Circuit Switching&#xff09;&#xff1a;通过物理线路的连接&#xff0c;动态地分配传输线路资源 ​​​​

【2024】10个好用的AI搜索引擎大盘点

在2024年&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI搜索引擎已经成为我们日常生活中不可或缺的一部分。这些基于人工智能技术的搜索引擎不仅提供了更快速、更准确的搜索体验&#xff0c;还通过自然语言处理&#xff08;NLP&#xff09;和机器学习&#xff08;ML&am…

快速学习“堆“排序(C语言数据结构)

前言&#xff1a; 堆的实现其实并不难&#xff0c;难的是要用堆实现排序&#xff0c;也就是堆的运用。 下面需要探究一下堆的排序是怎样的。 如何利用堆进行升序或者降序的排序。 "堆排序"&#xff1a; 原理&#xff1a; 例如&#xff1a;此时要将数组里的数组int a…

Leetcode面试经典150题-5.最长回文子串

解法都在代码里&#xff0c;不懂就留言或者私信 class Solution {public static String longestPalindrome(String s) {if(s null || s.length() 0) {return null;}//加工字符串&#xff0c;例如abcdcba加工成#a#b#c#d#a#b#c#d#String str getManacherString(s);char[] str…

【生日视频制作】滑行飞机机身改字,轻松修改文字AE模板修改文字软件生成器教程特效素材【AE模板】

飞机机身生日视频制作教程AE模板改文字特效广告生成器素材玩法 怎么如何做的【生日视频制作】滑行飞机机身改字&#xff0c;轻松修改文字AE模板修改文字软件生成器教程特效素材玩法【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或…

基于Java+SpringBoot+Vue的知识管理系统

基于JavaSpringBootVue的知识管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 哈喽…

利用“2+1链动模式小程序AI智能名片S2B2C商城源码”优化企业参与外部社群策略

摘要&#xff1a;在当今数字化时代&#xff0c;企业参与外部社群已成为其市场扩张、品牌塑造及用户增长不可或缺的一环。然而&#xff0c;面对浩如烟海的社群类型&#xff0c;包括行业论坛、地区性论坛、特定兴趣爱好的论坛以及短视频网站等&#xff0c;如何精准选择并有效介入…

计算机网络-PIM-SM组播实验

一、概述 目前为止我们学习了组播转发网络中的PIM协议&#xff0c;PIM模型有两种&#xff1a; PIM-DM主要使用在网络规模较小&#xff0c;用户集中的组播网络中。 PIM-SM主要使用在网络规模较大&#xff0c;用户较为分散的组播网络中。PIM-SM基于组播模型又可以分为PIM-SM&…

重装系统前如何备份数据?让重装无后顾之忧

在日常使用电脑的过程中&#xff0c;有时我们可能需要重装系统以解决一些难以通过常规手段解决的问题。然而&#xff0c;在重装系统之前&#xff0c;最重要的一步就是备份数据&#xff0c;以防止重要信息的丢失。本文将详细介绍如何在重装系统前进行数据备份&#xff0c;确保您…

周报(8.12-8.18)

周报(8.12-8.18) 本周工作 DD-Net学习与代码复现 DD-Net网络结构如上图所示。DD-Net也有一个为处理OpenFWI数据的版本&#xff1a;DD-Net70&#xff1a; 与传统DL-FWI不同的是&#xff0c;DD-Net同时拥有两个解码器&#xff0c;第一个解码器的目标是传统的速度模型&#xff0…

力扣第71题:简化路径 放弃栈模拟,选择数据流√(C++)

目录 题目 思路 解题过程 复杂度 Code 题目 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中&#xff0c;一个点&#xff…

医生隐瞒病情属于什么行为?

根据《民法典》第一千二百二十二条的规定&#xff0c;患者在诊疗活动中受到损害&#xff0c;有下列情形之一的&#xff0c;推定医疗机构有过错&#xff1a;   &#xff08;一&#xff09;违反法律、行政法规、规章以及其他有关诊疗规范的规定&#xff1b;   &#xff08;二…

LLMs 基础知识 | BERT 模型族

本文主要文章是解决蚂蚁金服携手上海财经大学&#xff0c;共同出具大预言模型白皮书一文中的部分模型问题。 01 Slef-Attention 注意力机制&#xff0c;注意力权重可以看作是输入对输出的重要程度。这里注意&#xff0c;所谓注意力&#xff0c;即模型认为该单词有多值得被注意…

基于BlockQueue的生产消费模型及Linux中的信号量

基于BlockQueue的生产消费模型 Task.hpp #pragma once#include<cstdio> #include<iostream> #include<string> #include<functional>using namespace std; class CalTask {using func_tfunction<int(int,int,char)>;//typedef function<int(…

妙用 Batch,StarRocks 存算分离实时性能起飞

前言 当大家提到存算分离时&#xff0c;尤其是考虑后端使用 AWS S3 为代表的对象存储作为数据存储时&#xff0c;直觉就是性能拉胯&#xff0c;只能用作批量数据处理场景&#xff0c;至少这是我在跟很多用户交流时获得的第一感受。而 StarRocks 作为一个具备强实时性数据分析引…

Vue实现zip压缩下载

1&#xff0c;安装依赖npm //jszip是一个用于创建、读取和编辑.zip文件的JavaScript库 https://stuk.github.io/jszip/ npm install jszip https://www.npmjs.com/package/file-saver npm install file-saver 2&#xff0c;在所需的页面中引入对应包 import JSZip from &…

【启明智显分享】智能音箱AI大模型一站式解决方案重塑人机交互体验,2个月高效落地

2010年左右&#xff0c;智能系统接入音箱市场&#xff0c;智能音箱行业在中国市场兴起。但大潮激荡&#xff0c;阿里、小米、百度三大巨头凭借自身强大的资本、技术、粉丝群强势入局&#xff0c;形成三足鼎立态势。经过几年快速普及&#xff0c;智能音箱整体渗透率极高&#xf…