在 TensorFlow 中使用循环神经网络 (RNN) 进行时间序列预测


prtyaa
prtyaa 2024-01-10 15:30:55 60360 赞同 0 反对 0
分类: 资源 标签: 运维
时间序列数据:时间序列中的每个数据点都链接到一个时间戳,该时间戳显示观察或记录数据的准确时间。包括许多领域:金融、经济、天气预报和机器学习,都经常使用此类数据。

时间序列数据经常显示随时间变化的模式或趋势,例如季节性或周期性模式,这是与之相关的一个基本特征。为了进行预测或更多地了解所观察到的潜在过程或事件,可以对这些模式进行分析和建模。

递归神经网络 (RNN)对数据中存在的时间依赖性进行建模,因为它包含先前输入的隐式记忆。因此 RNN 中经常使用本质上是连续的时间序列数据。为了处理 RNN 中的时间序列数据,TensorFlow 提供了许多 API 和工具,例如 tf.keras.layers.RNN API,它允许创建独特的 RNN 单元类并将其与数据一起使用。该 API 还支持多种 RNN 单元类型,包括 Basic RNN、LSTM 和 GRU。 

此示例使用股票价格数据,这是最流行的时间序列数据类型。

第1步: 导入所需的库。

  • Numpy 和 Pandas – 用于数据操作和分析
  • Matplotlib – 用于数据可视化。
  • Yahoo Finance – 提供财务数据进行分析。
  • Datetime – 用于处理日期和时间。
  • Math – 提供 Python 中的基本数学函数。
import numpy as np
import pandas as pd
import yfinance as yf
import datetime as dt
import matplotlib.pyplot as plt
import math

步骤 2: 此代码使用 yfinance 库的 yf.download() 方法从雅虎财经下载 Google 的历史股票数据。使用 datetime 模块的 dt.datetime() 方法,给出已获取数据的时间段的开始日期和结束日期。

然后使用 print() 函数显示下载的数据,其中使用 pd.set_option() 配置 Pandas DataFrame 的显示选项。

#开始和结束日期
start_date = dt.datetime(2020,4,1)
end_date = dt.datetime(2023,4,1)

#从雅虎金融加载
data = yf.download("GOOGL",start_date, end_date)

pd.set_option('display.max_rows', 4)
pd.set_option('display.max_columns',5)
print(data)

输出:

[*********************100%***********************]  1 of 1 completed
                  Open        High  ...   Adj Close    Volume
Date                                ...                      
2020-04-01   56.200001   56.471001  ...   55.105000  51970000
2020-04-02   55.000000   56.138500  ...   55.851501  56410000
...                ...         ...  ...         ...       ...
2023-03-30  100.910004  101.160004  ...  100.889999  33086200
2023-03-31  101.300003  103.889999  ...  103.730003  36823200

[756 rows x 6 columns]

步骤3: 接下来,我们将数据集按照80:20的比例分为训练和测试。使用 iloc[:,:1] 仅选择数据的第一列,并且 train_data 包含原始数据的第一个 training_data_len 行。 test_data 包含从 training_data_len 开始到末尾的原始数据的所有剩余行。

# 为训练设置80%的数据
training_data_len = math.ceil(len(data) * .8)
training_data_len

# 拆分数据集
train_data = data[:training_data_len].iloc[:,:1]
test_data = data[training_data_len:].iloc[:,:1]
print(train_data.shape, test_data.shape)

输出:

(605, 1) (151, 1)

步骤 4:此代码创建一个名为 dataset_train 的 numpy 数组,并用训练数据中的“Open”定价值填充它。然后将一维数组转换为二维数组。shape 属性,返回表示 dataset_train 数组的最终形状的元组 (num_rows, num_columns)。

# 选择未结价格值
dataset_train = train_data.Open.values
# 将 1D 阵列重塑为 2D 阵列
dataset_train = np.reshape(dataset_train, (-1,1))
dataset_train.shape

输出:

(605, 1)

步骤5: 归一化是数据预处理中的关键步骤,可增强机器学习模型的有效性和可解释性。因此,导入 sklearn 中的 MinMaxScaler 将数据集从 0 缩放到 1。使用 sklearn fit_transform() 方法,对训练数据集进行缩放。

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0,1))
# 缩放数据集
scaled_train = scaler.fit_transform(dataset_train)

print(scaled_train[:5])

输出:

[[0.01246754]
 [0.        ]
 [0.00764156]
 [0.01714287]
 [0.0607844 ]]

步骤6: 对测试数据进行同样的数据预处理。

# 选择未结价格值
dataset_test = test_data.Open.values
# 将1D阵列重塑为2D阵列
dataset_test = np.reshape(dataset_test, (-1,1))
# 规范化0和1之间的值
scaled_test = scaler.fit_transform(dataset_test)
print(*scaled_test[:5])

输出:

[0.98362881] [1.] [0.83867656] [0.84481572] [0.86118691]

步骤7: 本阶段时间序列数据必须分为训练集的X_train和y_train以及测试集的X_test和y_test。这样做的目的是将时间序列数据转化为可用于训练模型的监督学习问题。该循环在迭代时间序列数据时生成长度为 50 的输入/输出序列。使用这种方法,我们可以预测未来值,同时考虑数据对先前观测值的时间依赖性。

对于训练集:

X_train = []
y_train = []
for i in range(50, len(scaled_train)):
X_train.append(scaled_train[i-50:i, 0])
y_train.append(scaled_train[i, 0])
if i

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL2
粉丝 1 资源 1949 + 关注 私信
最近热门资源
分享如何统信UOS系统在屏蔽mysql显性的用户名称以及密码  614
分享免费开源高速下载器  577
分享如何在银河麒麟高级服务器操作系统V10SP3中需要启用内核审计功能。  572
通过shell脚本在统信UOS/麒麟系统中安装nginx  504
分享如何查看网卡中断的数量  422
分享查询网卡所在PCI插槽链路能力及当前链路状态  420
麒麟系统进行内存清理  413
统信UOS常见问题小总结  411
麒麟系统资源下载合集(适配各类cpu)  410
winrar绿色无广告版分享  393
最近下载排行榜
分享如何统信UOS系统在屏蔽mysql显性的用户名称以及密码 0
分享免费开源高速下载器 0
分享如何在银河麒麟高级服务器操作系统V10SP3中需要启用内核审计功能。 0
通过shell脚本在统信UOS/麒麟系统中安装nginx 0
分享如何查看网卡中断的数量 0
分享查询网卡所在PCI插槽链路能力及当前链路状态 0
麒麟系统进行内存清理 0
统信UOS常见问题小总结 0
麒麟系统资源下载合集(适配各类cpu) 0
winrar绿色无广告版分享 0
作者收入月榜
1

prtyaa 收益395.97元

2

zlj141319 收益228.77元

3

IT-feng 收益214.92元

4

1843880570 收益214.2元

5

风晓 收益208.24元

6

777 收益173.02元

7

哆啦漫漫喵 收益131.6元

8

Fhawking 收益106.6元

9

信创来了 收益105.97元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

加入交流群

请使用微信扫一扫!