数据片段:
[1.,0.52916667 0.55,0.5375 0.55714286 0.54285714 0.09395973]
[0.,0.59285714 0.55,0.5,0.53076923 0.5,0.09395973]
[0,0.53076923 0.5375 0.,0.5375 0.5,0.08277405]
[0,0.55625 0.55833333 1.,0.53888889 0.52777778 0.08137584]
[1.,0.52222222 0.52857143 0.54,0.55,0.55,0.10834132]
[1.,0.6875 0.6125 0.575 0.53,0.52,0.09395973]
[0.,0.55666667 0.55,0.55833333 0.52647059 0.52058824 0.08137584]
[0.,0.53529412 0.5,0.5,0.5,0.5,0.02205177]
[0,0.52083333 1.,1.,0.54,0.58,0.34563758]
[0,0.55,0.6,0.5,0.58,0.5,0.09395973]
[0.,0.67,0.5,0.0,0.5,0.5,0.07957814]
[0,0.51764706 1.,1.,0.54166667 0.55,0.16107383]
此时间序列数据框中的每一行包含7个要素,我试图预测下一个时间步的第一个要素是1还是0。
为实现这一目标,我已将所有内容向前移动一步以创建标签,如下所示:
def windows(data):
x_window_size = 100
y_window_size = 1
dataX, dataY = [], []
for i in range(len(data)-x_window_size-y_window_size):
x_window_data = data[i:(i+x_window_size)]
y_window_data = [data[(i + x_window_size + y_window_size)]]
dataX.append(x_window_data)
y = [x[0] for x in y_window_data]
dataY.append(y)
return np.array(dataX), np.array(dataY)
模特:
inputs = Input(shape=(100, 7))
x = CuDNNLSTM(128, return_sequences=True)(inputs)
x = Dropout(0.2)(x)
x = CuDNNLSTM(128, return_sequences=True)(x)
x = Dropout(0.2)(x)
x = CuDNNLSTM(128)(x)
x = Dropout(0.2)(x)
predictions = Dense(1, activation='linear')(x)
model = Model(inputs=inputs, outputs=predictions)
optimiser = keras.optimizers.Nadam(lr=0.01)
model.compile(
loss="mse",
optimizer=optimiser
)
如果我通过模型运行10,000行数据,在10个时期之后我会得到以下结果:
看起来没问题...但我的数据集实际上是400万行。当我通过训练运行完整的400万行时,它只是预测Y值的平均值(0.5):
在1或10个时期后结果相同。我无法弄清楚这里发生了什么。有什么想法吗?
答案 0 :(得分:0)
首先,有许多不同的方法,为什么会这样。
过去我遇到了类似的问题,输出也只是平均值。我在那里用股票价格预测工作。对于机器学习算法,从股票信息中提取有意义的信息非常困难,这就是为什么它开始预测随机结果或仅仅是你的情况下的平均值。这可能是模型可以获得的最好(预测股票价格),因为股票价格随机上下波动。不幸的是,在这种情况下,你无能为力。
第二种情况是您的数据太少。虽然您有400万行数据,但这有时不足以概括问题而您仍需要获取更多数据。
这是最有可能发生的情况。您的模型架构是错误的。您的真实数据是0或1,因此它应该是分类问题。将您的模型架构更改为以下内容:
你仍然需要进行微调,我还没有测试过。
x = CuDNNLSTM(128)(inputs)
x = Dropout(0.5)(x)
predictions = Dense(1, kernel_initializer='normal', activation='sigmoid')(x)
model.compile(loss='binary_crossentropy', optimizer='adam')
您的模型可能还有太多的噪音。您可以尝试使用图层64-64-1而不是128-128-128型号的模型,或者尝试使用32-1。您也可以将Dropout图层调整为0.3,0.4,0.5甚至更多。如果你的模型有很多噪音,那就是尝试和错误,试图消除噪音。
资源: