python - 现实与预测之间的延迟差距

标签 python machine-learning tensorflow lstm tflearn

使用机器学习(作为库,我尝试过 Tensorflow 和 Tflearn(我知道这只是 Tensorflow 的包装)),我试图预测下周某个区域的拥堵情况(请参阅我之前的问题,如果你想要更多的背景故事)。我的训练集由 400K 个标记条目组成(日期是每分钟的拥塞值)。

我的问题是我现在的预测和现实之间存在时间差距。

如果我必须根据现实和预测绘制一个图表,您会看到我的预测,虽然提前与现实具有相同的形状。她在现实面前增加/减少。这让我开始觉得也许我的训练有问题。看来我的预测并没有在我的训练结束时开始。

我的两个数据集(训练/测试)都位于两个不同的文件中。首先,我在我的训练集上进行训练(为了方便起见,我们假设它在第 100 分钟结束,我的测试集在第 101 分钟开始),一旦我的模型保存,我就会进行预测,它通常应该开始预测 101 或者我在某个地方错了?因为它似乎在我的训练停止后开始预测(例如,如果我保留我的示例,它将开始预测值 107)。

目前,一个糟糕的修复方法是从训练集中删除尽可能多的延迟值(以这个例子为例,它将是 7)并且它有效,不再有延迟,但我不明白为什么我遇到此问题或如何解决它,以免以后发生这种情况。

根据在不同网站上找到的一些建议,我的训练数据集中似乎存在间隙(在本例中缺少时间戳)可能是一个问题,因为确实有一些(总共大约整个数据集的 7 到 9% 是丢失)我已经使用 Pandas 添加了丢失的时间戳(我还给了它们最后一个知道时间戳的拥塞值),虽然我确实认为它可能有一点帮助(间隙较小)但它还没有修复问题所在。

我尝试了多步预测、多元预测、LSTM、GRU、MLP、Tensorflow、Tflearn,但它没有改变任何东西,让我认为它可能来 self 的训练。 这是我的模型训练。

def fit_lstm(train, batch_size, nb_epoch, neurons):
    X, y = train[:, 0:-1], train[:, -1]
    X = X.reshape(X.shape[0], 1, X.shape[1])
    print X.shape
    print y.shape
    
    model = Sequential()
    model.add(LSTM(neurons, batch_input_shape=(None, X.shape[1], X.shape[2]), stateful=False))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error', optimizer='adam')
    for i in range(nb_epoch):
        model.fit(X, y, epochs=1, batch_size=batch_size, verbose=0, shuffle=False)
        model.reset_states()
    return model

这 2 个形状是:

(80485, 1, 1)

(80485,)

(在此示例中,我仅使用 80K 数据作为速度训练)。

作为参数,我使用 1 个神经元、64 个批量大小和 5 个纪元。 我的数据集由 2 个文件组成。首先是包含 2 列的训练文件:

timestamp | values

第二个具有相同的形状,但是测试集(分开以避免对我的预测产生任何影响),该文件仅在每次预测完成后使用,并比较现实和预测。测试集从训练集停止的地方开始。

您知道这个问题的原因是什么吗?

编辑: 在我的代码中我有这个功能:

# invert differencing
    yhat = inverse_difference(raw_values, yhat, len(test_scaled)+1-i)
# invert differenced value
def inverse_difference(history, yhat, interval=1):
    return yhat + history[-interval]

它应该反转差异(从缩放值变为真实值)。 当像粘贴的示例(使用测试集)一样使用它时,我得到了完美,准确度高于 95%,并且没有差距。 Using the testing set to inverse the difference

由于实际上我们不知道这些值,所以我必须更改它。 我首先尝试使用训练集,但在这篇文章中解释了问题: Using the training set

为什么会发生这种情况?这个问题有解释吗?

最佳答案

找到了。这是“def inverse_difference(history, yhat,interval=1):”函数的问题。事实上,这让我的结果看起来就像是我最后的训练。这就是为什么我有差距,因为我的数据中有一个模式(峰值总是或多或少在同一时刻)我认为他正在做预测,而他只是从训练中返回值。

关于python - 现实与预测之间的延迟差距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45974521/

相关文章:

python - 从二进制文件中解码 python 中的字符串列表

scala - xgboost Scala API `predictContrib` 是什么?

python - 查找两个字符串(名称)之间的余弦相似度

python - 梯度下降未按预期工作

python - 加载 Fashion_mnist 数据需要太多时间

python - 使用k-means聚类基于单变量进行聚类

python - BeautifulSoup错误消息?

python - 如何在 Tornado 中使用 POST 方法?

python - 如何在tensorflow v2中启用cuda统一内存

python - 张量比较未按预期进行