时序最佳入门代码|基于pytorch的LSTM天气预测及数据分析

前言

在本篇文章,我们基于pytorch框架,构造了LSTM模型进行天气预测,并对数据进行了可视化分析,非常值得入门学习。该数据集提供了2013年1月1日至2017年4月24日在印度德里市的数据。其中包含的4个参数是平均温度(meantemp)、湿度(humidity)、风速(wind_speed)和平均气压(meanpressure),以下是特征的描述:

数据集和完整可用的代码可以在后台回复"代码04"获取。

数据可视化

我们自定义的可视化函数,用于绘制每个特征的分布,首先绘制箱线图:

def box_plot(self):
        graph_lsts = []
        for i, element in enumerate(self.data.transpose()):
            graph_lst = go.Box(y = element,
                               name = self.box_title,
                               boxpoints = 'outliers',
                               line = dict(width=1))    
            graph_lsts.append(graph_lst)
        fig = self.make_subplot(graph_lsts)
        fig.update_layout(title=self.box_title,
                          xaxis_title='Columns',
                          yaxis_title='Values',
                          template = 'simple_white')
        fig.show()

我们继续绘制折线图

#################### 2. Line Plot ######################    def line_plot(self):        line_lsts = []        for i, element in enumerate(self.data.transpose()):            line = go.Scatter(x = self.date,                               y = element,                               mode = 'lines',                               name = self.line_title)            line_lsts.append(line)        fig = self.make_subplot(line_lsts)        fig.update_layout(title=self.line_title,                          xaxis_title='Columns',                          yaxis_title='Values',                          template = 'simple_white')        fig.show()

图片

从可视化的折线图我们可以观察到,训练集中存在异常值,比如在'风速'和'平均气压'数据列中,一些数据点明显是离群的。

模型构建

受限于篇幅,我们这里只给出LSTM模型的代码,完整代码和数据可在公众号后台获取。模型结构非常简单,是一个两层的LSTM, 隐藏层大小为128。

class LSTMModel(nn.Module):    def __init__(self):        super().__init__()        self.lstm = nn.LSTM(input_size = 6,                             num_layers = 2,                            hidden_size = 128,                              batch_first = True,                             bidirectional= True)                self.dropout = nn.Dropout(0.2)        self.linear1 = nn.Linear(128*2, 64)         self.linear2 = nn.Linear(64, 8)         self.output_linear = nn.Linear(8, 1)            def forward(self, x):          x, _ = self.lstm(x)        x = self.dropout(x)        x = self.linear1(x)        x = self.linear2(x)        x = self.output_linear(x)        return x

定义好模型后,我们可以进行模型的训练和评估,以下是训练好后,绘制的预测值和原始值可视化展示。

图片

图片

我们模型的 RMSE值: 2.75

np.sqrt(mean_squared_error(eval_df.iloc[7:]['real_meantemp'], eval_df.iloc[7:]['pred_meantemp']))

  欢迎大家关注我的公众号【科学最top】,专注于时序高水平论文解读,回复‘论文2024’可获取,2024年ICLR、ICML、KDD、WWW、IJCAI五个顶会的时间序列论文整理列表和原文。

PyTorch 中使用 LSTM 进行时序预测的一般步骤如下: 1. 准备数据:将时序数据准备成适合输入 LSTM 的格式,通常是将数据划分为输入序列和目标序列。 2. 定义 LSTM 模型:使用 `torch.nn.LSTM` 类定义一个 LSTM 模型,并根据需求设置输入维度、隐藏状态维度、层数等参数。 3. 定义损失函数和优化器:选择适当的损失函数(如均方误差)和优化器(如随机梯度下降)来训练模型。 4. 训练模型:使用训练数据进行模型训练,通过前向传播计算预测值并与真实值比较,然后通过反向传播更新模型参数。 5. 预测未来值:使用训练好的模型进行未来值的预测。可以通过将已知的部分序列输入模型,然后逐步预测未来的值。 下面是一个示例代码,展示了如何使用 LSTM 进行时序预测: ```python import torch import torch.nn as nn import numpy as np # 准备数据 # 假设有一个输入序列 input_seq 和对应的目标序列 target_seq # 定义 LSTM 模型 class LSTMModel(nn.Module): def __init__(self, input_size, hidden_size, num_layers, output_size): super(LSTMModel, 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(x.device) c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值