没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
LSTM实现时间序列预测(PyTorch版) 一、基于PyTorch搭建LSTM模型实现风速时间序列预测 本篇则侧重于数据各个部分(模型输入、LSTM输入、LSTM输出、模型输出)维度的说明,因为作为初学者,有些小伙伴对于数据在不同时期的维度不太清楚,本文将一步一步带着大家了解各个张量的维度,帮助大家更加清晰了解整个项目的流转过程。 注意:对于新手小白来讲,一定要清楚每个环节输入数据以及输出数据的维度,还有每个维度代表的含义(特别是 batch_size、seq_len、feature_size,timestep,embedding_size 这些变量代表什么,不然看本篇文章会有点晕),只有这样才能够将自己的数据集应用到项目中进行调试。 接下来本篇文章我们将采用另外一种经典的循环神经网络——长短期记忆神经网络 LSTM 来对我们的时序数据建模处理,本篇将 讲解如何基于单变量进行时序预测,本篇是使用单个特征进行时序预测的,详细介绍项目的每个实现部分以及细节处理,帮助新手小白快速建立起如何处理时序数据的框架。 二、配置类 下面是本项目需要使用的参数以及相关变量,为了方便我们
资源推荐
资源详情
资源评论
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![vsdx](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![csv](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/88908094/bg1.jpg)
LSTM 实现时间序列预测(PyTorch
版)
一、基于 PyTorch 搭建 LSTM 模型实现风速时间序列预测
本篇则侧重于数据各个部分(模型输入、LSTM 输入、LSTM 输出、模型输出)维度的说明,
因为作为初学者,有些小伙伴对于数据在不同时期的维度不太清楚,本文将一步一步带着大
家了解各个张量的维度,帮助大家更加清晰了解整个项目的流转过程。
注意🚨🚨🚨:对于新手小白来讲,一定要清楚每个环节输入数据以及输出数据的维度,还有
每个维度代表的含义(特别是 batch_size、seq_len、feature_size,timestep,embedding_size
这些变量代表什么,不然看本篇文章会有点晕),只有这样才能够将自己的数据集应用到项
目中进行调试。
接下来本篇文章我们将采用另外一种经典的循环神经网络——长短期记忆神经网络 LSTM
来对我们的时序数据建模处理,本篇将💎 讲解如何基于单变量进行时序预测,本篇是使用
单个特征进行时序预测的,详细介绍项目的每个实现部分以及细节处理,帮助新手小白快速
建立起如何处理时序数据的框架。
二、配置类
下面是本项目需要使用的参数以及相关变量,为了方便我们将所有参数封装到一个类中,也
可以使用 argparse 参数解析方式。
为了说明数据各个阶段的维度变化,特此定义了如下变量大小,小伙伴需要记住下面变量的
值一遍理解下文说明各个阶段的维度大小。
class Config():
data_path = '../data/wind_dataset.csv'
timestep = 1 # 时间步长,就是利用多少时间窗口
batch_size = 32 # 批次大小
feature_size = 1 # 每个步长对应的特征数量,这里只使用 1 维,每天的风速
hidden_size = 256 # 隐层大小
output_size = 1 # 由于是单输出任务,最终输出层大小为 1,预测未来 1 天风速
num_layers = 2 # lstm 的层数
epochs = 10 # 迭代轮数
best_loss = 0 # 记录损失
learning_rate = 0.0003 # 学习率
model_name = 'lstm' # 模型名称
save_path = './{}.pth'.format(model_name) # 最优模型保存路径
![](https://csdnimg.cn/release/download_crawler_static/88908094/bg2.jpg)
config = Config()
三、时序数据集的制作
对于时序数据集的制作,在上篇文章已经说的很清楚,不清楚的小伙伴可以先去了解一下,
所以这里不再赘述。
该数据集有 8 列,也就是每天会有 8 个特征,例如风速、温度、降水量等,但是本文仍处于
入门阶段,所以不需要使用这么多变量同时预测,仅仅使用风速这一列特征进行时序预测,
也就是单变量输入,本项目是使用如下代码获取时序数据的:
# 形成训练数据,例如 12345789 12-3、23-4、34-5
def split_data(data, timestep, feature_size):
dataX = [] # 保存 X
dataY = [] # 保存 Y
# 将整个窗口的数据保存到 X 中,将未来一天保存到 Y 中
for index in range(len(data) - timestep):
dataX.append(data[index: index + timestep][:, 0])
dataY.append(data[index + timestep][0])
dataX = np.array(dataX)
dataY = np.array(dataY)
# 获取训练集大小
train_size = int(np.round(0.8 * dataX.shape[0]))
# 划分训练集、测试集
x_train = dataX[: train_size, :].reshape(-1, timestep, feature_size)
y_train = dataY[: train_size].reshape(-1, 1)
x_test = dataX[train_size:, :].reshape(-1, timestep, feature_size)
y_test = dataY[train_size:].reshape(-1, 1)
return [x_train, y_train, x_test, y_test]
运行上述代码后我们可以看一下,获得的训练集维度:
x_train, y_train, x_test, y_test = split_data(data, config.timestep, config.feature_size)
print(x_train.shape)
print(y_train.shape)
>>>(4510, 1, 1)
>>>(4510, 1)
![](https://csdnimg.cn/release/download_crawler_static/88908094/bg3.jpg)
上面的训练集的维度为【4510,1,1】,这三个维度的意思分别代表【样本数,时间步,特
征维度】,样本数就不用多说了吧,时间步就是利用过去多长时间来预测未来的数据,如果
我们设置为 30,那就是基于过去 30 天的样本数据来预测未来 1 天的数据,特征维度就是每
天的特征维度,如果我们利用所有特征,那么特征维度应该为 8(温度、风速、降水等),
但是本文使用的特征维度仅仅为风速,所以该维度为 1。
如果熟悉 NLP,那么时间步可以看成是 seq_len ,就是序列长度,一句话有多少个词,而特
征维度可以看成是 embedding_size ,也就是每个词的嵌入维度,如果不熟悉 NLP 也没关系,
只要记住我们是基于过于 timestep 天数的数据进行预测,而每一天的特征又需要一个向量
来表示,但是本文使用的是一个特征,所以 feature_size=1,如果使用多变量,那么就需要
使用一个向量来表示一天的数据,那么 feature_size=8,我们的数据维度就应该是【4510,
1,8】,如果设置利用前 10 天的数据预测未来 1 天的数据,那么维度就应该是【4510,
10,8】。
小伙伴们应该了解输入数据的格式以及各个维度的意义,所以可以自己尝试自己的数据集以
及尝试利用不同数量的特征以及时间步进行处理。
🚩🚩🚩至此,训练集的维度为【4510,1,1】,各个维度代表【样本数,时间步,特征维
度】,英文变量表示【len(data),timestep,feature_size】。
四、数据归一化
数据的 归一化和标准化 是特征缩放(feature scaling)的方法,是数据预处理的关键步骤。不
同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消
除指标之间的量纲影响,需要进行数据归一化/标准化处理,以解决数据指标之间的可比性。
原始数据经过数据归一化/标准化处理后,各指标处于同一数量级,适合进行综合对比评价。
常见的归一化方式有:Min-Max、Z-Score、L2 范数归一化等等,对于本项目使用的是 MIn-Max
归一化,他会将所有的数据缩放到 0-1 区间,对于该操作可以手动实现,代码如下:
(df - df.min()) / (df.max() - df.min())
也可以使用 sklearn 中提供的 MinMaxScaler() 函数实现,代码如下:
scaler = MinMaxScaler()
data = scaler_model.fit_transform(np.array(df))
有兴趣的小伙伴可以多多尝试不同的归一化方式,可以参照这篇文章进行尝试 归一化
(Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)。
五、数据集加载器
上面已经处理好了数据,获得了模型的输入数据,但是对于 PyTorch 的输入需要是 Tensor
类型数据,所以此时需要将上面获得的 numpy.array 类型数据转成 Tensor 类型数据。
x_train, y_train, x_test, y_test = split_data(data, config.timestep, config.input_size)
# 将数据转为 tensor
剩余16页未读,继续阅读
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/c06aeceb4281404d8bf47d08b40583b4_m0_68036862.jpg!1)
![avatar-vip](https://csdnimg.cn/release/downloadcmsfe/public/img/user-vip.1c89f3c5.png)
人工智能_SYBH
- 粉丝: 4w+
- 资源: 219
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)