使用LSTM深度学习模型进行温度的时间序列单步和多步预测(一)

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 使用LSTM深度学习模型进行温度的时间序列单步和多步预测

本文的目的是提供代码示例,并解释使用python和TensorFlow建模时间序列数据的思路。

本文展示了如何进行多步预测并在模型中使用多个特征。

本文的简单版本是,使用过去48小时的数据和对未来1小时的预测(一步),我获得了温度误差的平均绝对误差0.48(中值0.34)度。

利用过去168小时的数据并提前24小时进行预测,平均绝对误差为摄氏温度1.69度(中值1.27)。

所使用的特征是过去每小时的温度数据、每日及每年的循环信号、气压及风速。

使用来自https://openweathermap.org/的API获取数据。这些数据从1990年1月1日到2020.11月30日每小时在维尔纽斯电视塔附近收集一次。维尔纽斯不是一个大城市,电视塔就在城市里,所以电视塔附近的温度应该和城市所有地方的温度非常相似。

这里和整篇文章的主数据对象被称为d。它是通过读取原始数据创建的:

d=pd.read_csv(‘data/weather.csv’)
#Convertingthedtcolumntodatetimeobjectd[‘dt’] = [datetime.datetime.utcfromtimestamp(x) forxind[‘dt’]]
#Sortingbythedated.sort_values(‘dt’, inplace=True)

640.png

640.png

数据集中共有271008个数据点。

640.png

数据似乎是具有明确的周期模式。

640.png

上面的图表显示,气温有一个清晰的昼夜循环——中间温度在中午左右最高,在午夜左右最低。

640.png

这种循环模式在按月份分组的温度上更为明显——最热的月份是6月到8月,最冷的月份是12月到2月。

数据现在的问题是,我们只有date列。如果将其转换为数值(例如,提取时间戳(以秒为单位))并将其作为建模时的特性添加,那么循环特性将丢失。因此,我们需要做的第一件事就是设计一些能够抓住周期性趋势的特性。

我们想让机器知道,23点和0点比小时0点和4点更接近。我们知道周期是24小时。我们可以用cos(x)和sin(x)函数。函数中的x是一天中的一个小时。

#Extractingthehourofdayd["hour"] = [x.hourforxind["dt"]]
#Creatingthecyclicaldailyfeatured["day_cos"] = [np.cos(x* (2*np.pi/24)) forxind["hour"]]
d["day_sin"] = [np.sin(x* (2*np.pi/24)) forxind["hour"]]

得到的dataframe如下:

640.png

640.png

新创建的特征捕捉了周期性模式。可能会出现一个问题,为什么我们同时使用sin和cos函数?

在上图中绘制一条水平线并仅分析其中一条曲线,我们将得到例如cos(7.5h)= cos(17.5h)等。在学习和预测时,这可能会导致一些错误,因此为了使每个点都唯一,我们添加了另一个循环函数。同时使用这两个功能,可以将所有时间区分开。

为了在一年中的某个时间创建相同的循环逻辑,我们将使用时间戳功能。python中的时间戳是一个值,用于计算自1970.01.01 0H:0m:0s以来经过了多少秒。python中的每个date对象都具有timestamp()函数。

#Extractingthetimestampfromthedatetimeobjectd["timestamp"] = [x.timestamp() forxind["dt"]]
#Secondsindays=24*60*60#Secondsinyearyear= (365.25) *sd["month_cos"] = [np.cos((x) * (2*np.pi/year)) forxind["timestamp"]]
d["month_sin"] = [np.sin((x) * (2*np.pi/year)) forxind["timestamp"]]

640.png

在本节中,我们从datetime列中创建了4个其他功能:day_sin,day_cos,month_sin和month_cos。

在天气数据集中,还有两列:wind_speed和pressure。风速以米/秒(m / s)为单位,压力以百帕斯卡(hPa)为单位。

640.png

640.png

要查看温度与两个特征之间的任何关系,我们可以绘制二维直方图:

640.png

640.png

颜色越强烈,两个分布的某些bin值之间的关系就越大。例如,当压力在1010和1020 hPa左右时,温度往往会更高。

我们还将在建模中使用这两个功能。

我们使用所有要素工程获得的数据是:

640.png

我们要近似的函数f为:

640.png

目标是使用过去的值来预测未来。数据是时间序列或序列。对于序列建模,我们将选择具有LSTM层的递归神经网络的Tensorflow实现。

LSTM网络的输入是3D张量:

(样本,时间步长,功能)

样本—用于训练的序列总数。

目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 算法
深度学习和机器学习中针对非时间序列的回归任务,有哪些改进角度?
本文探讨了在深度学习和机器学习中针对非时间序列的回归任务的多种改进策略,包括数据预处理、数据集增强、特征选择、模型选择、模型正则化与泛化、优化器选择、学习率调整、超参数调优以及性能评估与模型解释,旨在提升模型的性能和可解释性。
53 1
深度学习和机器学习中针对非时间序列的回归任务,有哪些改进角度?
|
2月前
|
机器学习/深度学习 API 异构计算
7.1.3.2、使用飞桨实现基于LSTM的情感分析模型的网络定义
该文章详细介绍了如何使用飞桨框架实现基于LSTM的情感分析模型,包括网络定义、模型训练、评估和预测的完整流程,并提供了相应的代码实现。
|
2月前
|
机器学习/深度学习 自然语言处理 算法
7.1.3、使用飞桨实现基于LSTM的情感分析模型
该文章介绍了如何使用飞桨(PaddlePaddle)实现基于长短时记忆网络(LSTM)的情感分析模型,包括数据处理、网络定义、模型训练、评估和预测的详细步骤。
|
9天前
|
机器学习/深度学习 存储 自然语言处理
深度学习之任务序列中的快速适应
基于深度学习的任务序列中的快速适应是指模型在接连处理不同任务时,能够迅速调整和优化自身以适应新任务的能力。这种能力在动态环境和多任务学习中尤为重要,旨在减少训练时间和资源需求。
19 3
|
29天前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的CNN-LSTM的时间序列回归预测matlab仿真
本项目展示了一种结合灰狼优化(GWO)与深度学习模型(CNN和LSTM)的时间序列预测方法。GWO算法高效优化模型超参数,提升预测精度。CNN提取局部特征,LSTM处理长序列依赖,共同实现准确的未来数值预测。项目包括MATLAB 2022a环境下运行的完整代码及视频教程,代码内含详细中文注释,便于理解和操作。
|
2月前
|
机器学习/深度学习 算法 数据挖掘
基于WOA优化的CNN-LSTM的时间序列回归预测matlab仿真
本项目采用MATLAB 2022a实现时间序列预测,利用CNN与LSTM结合的优势,并以鲸鱼优化算法(WOA)优化模型超参数。CNN提取时间序列的局部特征,LSTM处理长期依赖关系,而WOA确保参数最优配置以提高预测准确性。完整代码附带中文注释及操作指南,运行效果无水印展示。
|
3月前
|
机器学习/深度学习 自然语言处理 TensorFlow
使用Python实现深度学习模型:序列建模与生成模型的博客教程
【7月更文挑战第2天】 使用Python实现深度学习模型:序列建模与生成模型的博客教程
50 1
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
Python实现循环神经网络RNN-LSTM回归模型项目实战(股票价格预测)
Python实现循环神经网络RNN-LSTM回归模型项目实战(股票价格预测)
140 0
|
3月前
|
机器学习/深度学习 算法
基于PSO粒子群优化的CNN-LSTM的时间序列回归预测matlab仿真
**算法预览图省略** - **软件版本**: MATLAB 2022a - **核心代码片段**略 - **PSO-CNN-LSTM概览**: 结合深度学习与优化,解决复杂时间序列预测。 - **CNN**利用卷积捕获时间序列的空间特征。 - **LSTM**通过门控机制处理长序列依赖,避免梯度问题。 - **流程**: 1. 初始化粒子群,每个粒子对应CNN-LSTM参数。 2. 训练模型,以验证集MSE评估适应度。 3. 使用PSO更新粒子参数,寻找最佳配置。 4. 迭代优化直到满足停止条件,如最大迭代次数或找到优良解。
|
4月前
|
机器学习/深度学习 自然语言处理 PyTorch
【自然语言处理NLP】Bert预训练模型、Bert上搭建CNN、LSTM模型的输入、输出详解
【自然语言处理NLP】Bert预训练模型、Bert上搭建CNN、LSTM模型的输入、输出详解
102 0