Rya*_*len 12 python machine-learning
我有一个问题,在这一点上,我完全迷失了如何解决它.我正在使用带有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)
Run Code Online (Sandbox Code Playgroud)
所以我正在获取输入数据(两列数据帧),创建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]]
Run Code Online (Sandbox Code Playgroud)
但我应该得到
[[ 73, 48],
[ 74, 42],
[ 91, 51],
[102, 64],
[109, 63],
[ 93, 65],
[ 92, 58]]
Run Code Online (Sandbox Code Playgroud)
原始数据集只有42行,所以我想知道是否有足够的工作吗?或者我错过了建模过程中的关键步骤?我已经看过一些使用嵌入层等的例子,是我应该看的东西吗?
在此先感谢您的帮助!
ted*_*ted 13
我知道现在已经很晚了,但我刚刚遇到了你的问题,希望现在还不算太晚,或者你仍然在这里找到一些知识.
首先,Stackoverflow可能不是这类问题的最佳位置.第一个原因是你有一个概念性问题,而不是这个网站的目的.此外,您的代码运行所以它甚至不是一般编程的问题.看看统计数据.
从我看到的第二个没有概念错误.您正在使用以下所需的一切:
return_sequences=false就在你的Dense图层之前mse 成本/损失/目标函数第三,我发现你的网络极不可能用这么少的数据来学习任何东西.您必须了解这里的数据少于参数!对于绝大多数的监督学习算法,你需要的第一件事就是不是一个好的模型,它是很好的数据.您无法从如此少的示例中学习,特别是对于LSTM网络等复杂模型.
第四,您的目标数据似乎是由相对较高的值组成的.这里预处理的第一步可能是标准化数据:将其置于零左右 - 即按平均值转换数据 - 并按标准偏差重新缩放.这真的有助于学习!
第五,一般来说,您应该考虑一些改进学习和减少过度拟合的事情:
最后但并非最不重要的是我建议您在Github上查看本教程,特别是关于keras时间序列的循环教程.
PS:Daniel Hnyk更新了他的帖子 ;)