时序预测 | 基于DLinear+PatchTST多变量时间序列预测模型(pytorch)

效果一览

在这里插入图片描述

在这里插入图片描述

基本介绍

DLinear+PatchTST多变量时间序列
dlinear,patchtst
python代码,pytorch架构
适合功率预测,风电光伏预测,负荷预测,流量预测,浓度预测,机械领域预测等等各种时间序列预测。
Patchest是2023年发表了一个新的模型,它在时间序列分析的多个任务中实现了最先进的结果。创新点超级强。
模型精度高.
功能如下:
1.多变量输入,单变量输出/可改多输出
2.多时间步预测,单时间步预测
3.评价指标:R方 RMSE MAE MAPE
对比图
4.数据从excel/csv文件中读取
5.最终结果输入到一个csv文件中,可以供下一步使用
代码带数据,注释清晰,适合新手小白

程序设计

  • 完整程序和数据获取方式:私信博主回复基于DLinear+PatchTST多变量时间序列预测模型(pytorch)

参考资料

[1] http://t.csdn.cn/pCWSp
[2] https://download.csdn.net/download/kjm13182345320/87568090?spm=1001.2014.3001.5501
[3] https://blog.csdn.net/kjm13182345320/article/details/129433463?spm=1001.2014.3001.5501

PyTorch中搭建LSTM模型进行时序预测,基于多变量的情况可以分为以下几个步骤: 1. 数据准备:将多个变量时序数据整合成一个数据集,并进行归一化处理。 2. 构建LSTM模型:使用PyTorch中的nn.LSTM模块构建LSTM模型。需要注意的是,LSTM模型的输入应该是一个三维张量,即(batch_size, sequence_length, input_size),其中batch_size表示批次大小,sequence_length表示序列长度,input_size表示每个时间步的输入维度。 3. 模型训练:使用PyTorch中的nn.MSELoss作为损失函数,并使用优化器进行模型训练。在训练过程中,需要将数据集分成训练集和验证集,以便进行模型调优。 4. 模型预测:使用训练好的模型进行预测。在预测过程中,需要将测试数据集按照与训练数据集相同的方式进行归一化处理,并将预测结果进行反归一化。 下面是一个示例代码,用于演示如何使用PyTorch中的nn.LSTM模块进行时序预测,基于多变量的情况: ``` import torch import torch.nn as nn import numpy as np import pandas as pd from sklearn.preprocessing import MinMaxScaler # 数据准备 data = pd.read_csv('data.csv') data = data.dropna() data = data[['var1', 'var2', 'var3', 'var4']] scaler = MinMaxScaler() data = scaler.fit_transform(data) data = torch.FloatTensor(data) # 构建LSTM模型 class LSTM(nn.Module): def __init__(self, input_size, hidden_size, output_size): super().__init__() self.hidden_size = hidden_size self.lstm = nn.LSTM(input_size, hidden_size) self.fc = nn.Linear(hidden_size, output_size) def forward(self, x): batch_size = x.size(0) hidden = (torch.zeros(1, batch_size, self.hidden_size), torch.zeros(1, batch_size, self.hidden_size)) out, hidden = self.lstm(x, hidden) out = self.fc(out[:, -1, :]) return out model = LSTM(input_size=4, hidden_size=32, output_size=1) # 模型训练 criterion = nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.01) train_size = int(len(data) * 0.8) train_data = data[:train_size] val_data = data[train_size:] for epoch in range(100): train_loss = 0.0 val_loss = 0.0 model.train() optimizer.zero_grad() output = model(train_data[:, :-1, :]) loss = criterion(output, train_data[:, -1, 0]) loss.backward() optimizer.step() train_loss += loss.item() model.eval() with torch.no_grad(): output = model(val_data[:, :-1, :]) loss = criterion(output, val_data[:, -1, 0]) val_loss += loss.item() print('Epoch: %d, Train Loss: %.6f, Val Loss: %.6f' % (epoch+1, train_loss, val_loss)) # 模型预测 test_data = np.array([[0.7, 0.8, 0.6, 0.7], [0.8, 0.9, 0.7, 0.8], [0.9, 1.0, 0.8, 0.9]]) test_data = scaler.transform(test_data) test_data = torch.FloatTensor(test_data) model.eval() with torch.no_grad(): output = model(test_data[:, :-1, :]) pred = scaler.inverse_transform(np.array([output.item()]).reshape(-1, 1)) print('Predicted Value:', pred) ``` 需要注意的是,上述代码中的数据集是通过读取一个名为data.csv的文件来获取的。如果要使用自己的数据集,需要将数据集读取到一个pandas DataFrame对象中,并将其转换为numpy数组或PyTorch张量。此外,还需要根据具体情况调整模型的参数,如LSTM的隐藏单元数、学习率等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器学习之心

谢谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值