Keras LSTM时间序列

时间:2015-09-10 14:10:56

标签: machine-learning python

我有一个问题,此时我完全迷失了如何解决它。我使用带有LSTM图层的Keras投影时间序列。我试图使用之前的10个数据点来预测第11个数据。

以下是代码:

from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM

def _load_data(data):
"""
data should be pd.DataFrame()
"""
n_prev = 10
docX, docY = [], []
for i in range(len(data)-n_prev):
    docX.append(data.iloc[i:i+n_prev].as_matrix())
    docY.append(data.iloc[i+n_prev].as_matrix())
if not docX:
    pass
else:
    alsX = np.array(docX)
    alsY = np.array(docY)
    return alsX, alsY

X, y = _load_data(df_test)

X_train = X[:25]
X_test = X[25:]

y_train = y[:25]
y_test = y[25:]

in_out_neurons = 2
hidden_neurons = 300
model = Sequential()
model.add(LSTM(in_out_neurons, hidden_neurons, return_sequences=False))
model.add(Dense(hidden_neurons, in_out_neurons))
model.add(Activation("linear"))
model.compile(loss="mean_squared_error", optimizer="rmsprop")
model.fit(X_train, y_train, nb_epoch=10, validation_split=0.05)

predicted = model.predict(X_test)

所以我取输入数据(两列数据帧),创建X是一个n乘10乘2的数组,y是一个n乘2的数组,比最后一行提前一步在每个X数组中(用直接在其前面的点标记数据。

预测正在回归

[[ 7.56940445,  5.61719704],
[ 7.57328357,  5.62709032],
[ 7.56728049,  5.61216415],
[ 7.55060187,  5.60573629],
[ 7.56717342,  5.61548522],
[ 7.55866942,  5.59696181],
[ 7.57325984,  5.63150951]]

但我应该

[[ 73,  48],
[ 74,  42],
[ 91,  51],
[102,  64],
[109,  63],
[ 93,  65],
[ 92,  58]]

原始数据集只有42行,所以我想知道是否还有不足以使用?或者我错过了建模过程中的关键步骤?我已经看过一些使用嵌入层等的例子,那是我应该看的东西吗?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:12)

嘿瑞恩!

我知道现在已经很晚了,但我刚刚遇到了你的问题,希望现在还不晚,或者你仍然在这里找到一些知识。

首先,Stackoverflow可能不是这类问题的最佳位置。第一个原因是你有一个概念性问题,而不是这个网站的目的。此外,您的代码运行所以它甚至不是一般编程的问题。 查看stats

从我看到的

第二没有概念错误。你正在使用所有必要的东西:

  • lstm with propper dimensions
  • return_sequences=false就在Dense图层
  • 之前
  • 输出的线性激活
  • mse费用/损失/目标函数

第三但是,我发现您的网络极不可能通过如此少的数据来学习任何内容。您必须了解这里的数据少于参数!对于绝大多数的监督学习算法,你需要的第一件事就是不是一个好的模型,它是很好的数据。您无法从如此少的示例中学习,特别是对于LSTM网络等复杂模型。

第四您的目标数据似乎是由相对较高的值组成的。这里预处理的第一步可能是标准化数据:将其置于零左右 - 即按平均值转换数据 - 并按标准偏差重新缩放。这真的有助于学习!

第五一般来说,您应该考虑以下几点来改进学习并减少过度拟合:

最后但并非最不重要我建议您查看此tutorial on Github,尤其是recurrent tutorial for time series with keras

PS:Daniel Hnyk更新了他的post;)