前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >时序最佳入门代码|基于pytorch的LSTM天气预测及数据分析

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

作者头像
用户4434621
发布2024-09-18 16:52:39
990
发布2024-09-18 16:52:39
举报
文章被收录于专栏:科学最Top

前言

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

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

数据可视化

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

代码语言:javascript
复制
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()

我们继续绘制折线图

代码语言:javascript
复制
#################### 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。

代码语言:javascript
复制
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

代码语言:javascript
复制
np.sqrt(mean_squared_error(eval_df.iloc[7:]['real_meantemp'], eval_df.iloc[7:]['pred_meantemp']))
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科学最Top 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 数据可视化
  • 模型构建
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档