为了账号安全,请及时绑定邮箱和手机立即绑定

LSTM X 值在预测上发生了变化?

LSTM X 值在预测上发生了变化?

饮歌长啸 2022-05-11 16:36:09
简介和问题:我对 Keras 和深度学习有些陌生,我正在尝试使用 LSTM 预测特斯拉的股价。我绝对是一个机器学习/深度学习的初学者,所以我希望有更多知识和经验的人可以帮助指导我朝着正确的方向前进。我的网络在 y 值预测上表现良好。但似乎 x 值向原点左移太远了。似乎如果我将数据向右移动,预测实际上会非常好。下面是预测图的图片:我很确定错误来自我制作 X_test 值数组时。以下是将以下所有代码组织成部分:数据集:我的火车数据是特斯拉从 2014 年到 2018 年的 4 年收盘价。我要预测的数据是 2019 年的收盘价。# get 2014-2018 data to train our modelstart = datetime.datetime(2014,1,1)end = datetime.datetime(2018,12,30)df = web.DataReader("TSLA", 'yahoo', start, end) # get 2019 data to test our model on start = datetime.datetime(2019,1,1)end = datetime.date.today()test_df = web.DataReader("TSLA", 'yahoo', start, end) # sort by datedf = df.sort_values('Date')test_df = test_df.sort_values('Date')# fix the date df.reset_index(inplace=True)df.set_index("Date", inplace=True)test_df.reset_index(inplace=True)test_df.set_index("Date", inplace=True)df.tail()                  High         Low        Open       Close   Volume  Date                                                                  2014-01-02  152.479996  146.550003  149.800003  150.100006  6188400   2014-01-03  152.190002  148.600006  150.000000  149.559998  4695000   2014-01-06  150.399994  145.240005  150.000000  147.000000  5361100   2014-01-07  150.399994  145.250000  147.619995  149.360001  5034100   2014-01-08  153.699997  148.759995  148.850006  151.279999  6163200   ...                ...         ...         ...         ...      ...   2018-12-24  314.500000  295.200012  313.500000  295.390015  5559900   2018-12-26  326.970001  294.089996  300.000000  326.089996  8163100   2018-12-27  322.170013  301.500000  319.839996  316.130005  8575100   2018-12-28  336.239990  318.410004  323.100006  333.869995  9939000   2018-12-31  339.209991  325.260010  337.790009  332.799988  6302300创建火车数据:# create train set of adj close prices data:train_data = df.loc[:,'Adj Close'].as_matrix()print(train_data.shape) # 1258 for 循环前 train_data 的 len 为 1258,for 循环后为 1222。
查看完整描述

1 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

解决方案:

如果有人从谷歌找到这个我想通了。我将训练和测试数据创建代码更改为:


'''Function to create a dataset to feed into an LSTM'''

def create_dataset(dataset, look_back):

    dataX, dataY = [], []

    for i in range(len(dataset)-look_back):

        a = dataset[i:(i + look_back), 0]

        dataX.append(a)

        dataY.append(dataset[i + look_back, 0])

    return np.array(dataX), np.array(dataY)


# Create the data to train our model on:

time_steps = 36

X_train, y_train = create_dataset(train_data, time_steps)


# reshape it [samples, time steps, features]

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


print(X_train.shape) # 1222, 36, 1

测试数据:

# Get the stock prices for 2019 to have our model make the predictions

test_data = test_df['Adj Close'].values

test_data = test_data.reshape(-1,1)

test_data = scaler.transform(test_data)


# Create the data to test our model on:

time_steps = 36

X_test, y_test = create_dataset(test_data, time_steps)


# store the original vals for plotting the predictions 

y_test = y_test.reshape(-1,1)

org_y = scaler.inverse_transform(y_test)


# reshape it [samples, time steps, features]

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


# Predict the prices with the model

predicted_y = model.predict(X_test)

predicted_y = scaler.inverse_transform(predicted_y)

新预测:

我将其更改为绘制存储的原始 y val org_y,然后绘制我们预测的 y val


plt.plot(org_y, color = 'red', label = 'Real Tesla Stock Price')

plt.plot(predicted_y, color = 'blue', label = 'Predicted Tesla Stock Price')

plt.title('Tesla Stock Price Prediction')

plt.xlabel('Time')

plt.ylabel('Tesla Stock Price')

plt.legend()

plt.show()

//img1.sycdn.imooc.com//627b75ca0001ec2903900279.jpg

查看完整回答
反对 回复 2022-05-11
  • 1 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信