我们如何使使用 python 的 RNN - LSTM 的预测更加一致?
How do we make the predictions using RNN - LSTM using python more consistent?
我构建了一组 python 脚本。这些脚本执行以下任务 -
- 根据用户输入(股票代码、开始日期、结束日期等)获取股票价格信息
- 根据股票价格信息构建和训练模型
- 预测下一个预测价格和相关的 RMSE(均方根误差)
- 将输出与用户输入一起写入 xlsx 文件
到目前为止一切顺利,它以体面的方式完成了上述所有工作。但是,每次我使用相同的数据和用户输入执行脚本 (2) 和 (3) 时,我都会得到不同的预测值。我知道这些是预测,即使所有因素保持不变,预测值也会有所不同。
比如说,如果trial#1的pred值为100,那么trial#2的pred值为105,trial#3的pred值为95,依此类推。 (plus/minus) 5 的这种变化是可以接受的。但是预测值不能在80到120之间。
我的问题是 - 如何最小化预测值的变化?
提前致谢,
桑杰
这是我正在使用的示例代码。
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout
from tensorflow.python.util import deprecation
model = Sequential()
lstm1 = LSTM(units=60, return_sequences=True, input_shape = (x_train.shape[1],1))
lstm2 = LSTM(units=60, return_sequences=True)
lstm3 = LSTM(units=60)
dropOut = Dropout(0.2)
dense = Dense(units=1)
model.add(lstm1)
model.add(dropOut)
model.add(lstm2)
model.add(dropOut)
model.add(lstm2)
model.add(dropOut)
model.add(lstm3)
model.add(dropOut)
model.add(dense)
model.compile(optimizer='adam', loss='mean_squared_error')
如果您的模型预测值的变化很大,则表明您的模型训练得不够好。请通过增加轮数来进一步训练您的模型,并为您的模型添加更多层。
此外,我建议您为模型的层添加适当的激活函数。
首先,出于多种原因,LSTM 不足以预测股票价格,即使有 20 个技术指标,如 Kaggle 笔记本 (https://www.kaggle.com/kratisaxena/stock-market-technical-indicators-visualization) 所示。
其次,为了始终如一地获得相同的结果,最简单的方法是设置一个 numpy 种子,使用 np.random.seed(0)
或您喜欢的任何整数来代替 0.
我构建了一组 python 脚本。这些脚本执行以下任务 -
- 根据用户输入(股票代码、开始日期、结束日期等)获取股票价格信息
- 根据股票价格信息构建和训练模型
- 预测下一个预测价格和相关的 RMSE(均方根误差)
- 将输出与用户输入一起写入 xlsx 文件
到目前为止一切顺利,它以体面的方式完成了上述所有工作。但是,每次我使用相同的数据和用户输入执行脚本 (2) 和 (3) 时,我都会得到不同的预测值。我知道这些是预测,即使所有因素保持不变,预测值也会有所不同。
比如说,如果trial#1的pred值为100,那么trial#2的pred值为105,trial#3的pred值为95,依此类推。 (plus/minus) 5 的这种变化是可以接受的。但是预测值不能在80到120之间。
我的问题是 - 如何最小化预测值的变化?
提前致谢, 桑杰
这是我正在使用的示例代码。
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout
from tensorflow.python.util import deprecation
model = Sequential()
lstm1 = LSTM(units=60, return_sequences=True, input_shape = (x_train.shape[1],1))
lstm2 = LSTM(units=60, return_sequences=True)
lstm3 = LSTM(units=60)
dropOut = Dropout(0.2)
dense = Dense(units=1)
model.add(lstm1)
model.add(dropOut)
model.add(lstm2)
model.add(dropOut)
model.add(lstm2)
model.add(dropOut)
model.add(lstm3)
model.add(dropOut)
model.add(dense)
model.compile(optimizer='adam', loss='mean_squared_error')
如果您的模型预测值的变化很大,则表明您的模型训练得不够好。请通过增加轮数来进一步训练您的模型,并为您的模型添加更多层。
此外,我建议您为模型的层添加适当的激活函数。
首先,出于多种原因,LSTM 不足以预测股票价格,即使有 20 个技术指标,如 Kaggle 笔记本 (https://www.kaggle.com/kratisaxena/stock-market-technical-indicators-visualization) 所示。
其次,为了始终如一地获得相同的结果,最简单的方法是设置一个 numpy 种子,使用 np.random.seed(0)
或您喜欢的任何整数来代替 0.