【问题标题】:Future prediction using time series data set with Tensorflow使用带有 Tensorflow 的时间序列数据集进行未来预测
【发布时间】:2019-08-10 18:32:30
【问题描述】:

我有近 5 年的时间序列数据。使用这些数据我想预测未来 2 年。如何做到这一点?

我为此参考了许多网站。我注意到大多数预测仅使用用于训练的同一组数据完成,他们没有预测未来,例如未来 30 天。如果可以通过 TensorFlow 实现这一点。我可以知道如何实现吗?

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import tensorflow as tf
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import LSTM
from tensorflow.keras.layers import Dropout

dataset_train = pd.read_csv(r'C:\Users\Kavin\source\repos\SampleTensorFlow\SampleTensorFlow\data\traindataset.csv')
training_set = dataset_train.iloc[:, 1:2].values

sc = MinMaxScaler(feature_range = (0, 1))
training_set_scaled = sc.fit_transform(training_set)

X_train = []
y_train = []
for i in range(60, 2035):
    X_train.append(training_set_scaled[i-60:i, 0])
    y_train.append(training_set_scaled[i, 0])
X_train, y_train = np.array(X_train), np.array(y_train)

X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))


regressor = Sequential()

regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 1)))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))


regressor.add(Dense(units = 1))

regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')

regressor.fit(X_train, y_train, epochs = 100, batch_size = 32)


dataset_test = pd.read_csv(r'C:\Users\Kavin\source\repos\SampleTensorFlow\SampleTensorFlow\data\testdataset.csv')
result = dataset_test[['Date','Open']]
real_stock_price = dataset_test.iloc[:, 1:2].values


dataset_total = pd.concat((dataset_train['Open'], dataset_test['Open']), axis = 0)
inputs = dataset_total[len(dataset_total) - len(dataset_test) - 60:].values
inputs = inputs.reshape(-1,1)
inputs = sc.transform(inputs)
X_test = []
for i in range(60, 76):
    X_test.append(inputs[i-60:i, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
predicted_stock_price = regressor.predict(X_test)
predicted_stock_price = sc.inverse_transform(predicted_stock_price)

result['PredictedResult'] = pd.Series(predicted_stock_price.ravel(), index=result.index)

result.to_csv(r"C:\Users\Kavin\Downloads\PredictedStocks.csv", index=False)

ax = plt.gca()

result.plot(kind='line', x='Date', y='Open', color='red', label = 'Real Stock Price', ax=ax)
result.plot(kind='line', x='Date', y='PredictedResult', color='blue', label = 'Predicted Stock Price', ax=ax)

plt.show()

【问题讨论】:

  • 能分享一下你试过的代码吗
  • androidkt.com/time-series 可能有帮助
  • @Jeril 我已经在这篇文章中添加了代码。
  • 你在运行这个时遇到什么问题
  • @Jeril 不,我在运行它时没有遇到任何问题。该样本预测的是同一数据集的值,而不是未来的值,例如 2022 年的结果。所以我需要知道如何计算未来的预测结果(预测值),比如未来 20 天、未来 10 个月、明年。

标签: python tensorflow time-series prediction


【解决方案1】:

对于所有机器学习问题,您都想问自己“我想预测什么以及我有什么数据?”

如果您想预测未来某个未定义时间的值,我们称该时间为 T

我们假设您当前的数据被标记为 ie。对于每个样本/行 (x),您都有一个对应的值 (y)。让 xt 成为你的 x 数据的时间戳

如果您想在 xt + T 时间预测 y,那么您必须为算法提供数据,例如每个样本 x,对应的标签是y在时间xt + T

这样,您的算法将“学习”从时间 的数据中预测时间 xt + Ty 的值xt

对于 Pandas,这可以通过 shift 实现。

【讨论】:

    猜你喜欢
    • 2019-08-09
    • 2020-09-28
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多