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

时间:2017-08-31 06:18:19

标签: python machine-learning tensorflow lstm tflearn

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

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

如果我必须绘制一张带有现实和预测的图表,你会看到我的预测,同时具有与现实相同的形状。她在现实之前增加/减少。它开始让我觉得我的训练可能有问题。看来,当我的训练结束时,我的预测没有开始。

我的两个数据集(培训/测试)都在2个不同的文件上。首先,我训练我的训练集(为了方便起见,我们说它在第100分钟结束,我的测试设置从第101分钟开始),一旦我的模型保存我做我的预测,它通常应该开始预测101或我错了某处?因为在我的训练停止后它似乎开始预测方式(如果我保留我的例子,它将开始预测值107例如)。

现在,其中一个错误的解决办法是从训练集中移除尽可能多的延迟值(以此为例,它将是7)并且它有效,不再有延迟,但我不明白为什么我有这个问题或如何解决它所以以后不会发生。

根据在不同网站上发现的一些建议,似乎我的训练数据集中存在差距(在这种情况下缺少时间戳)可能是一个问题,看到确实存在一些问题(总共大约7%到9%的整个数据集是我已经使用Pandas添加了丢失的时间戳(我也给了他们最后知道的时间戳的拥塞值),而我认为它可能有所帮助(差距较小)它没有修复问题。

我尝试了多步骤预测,多变量预测,LSTM,GRU,MLP,Tensorflow,Tflearn,但它没有改变任何让我觉得它可能来自我的训练。 这是我的模特训练。

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个batch_size和5个纪元。 我的数据集由2个文件组成。首先是包含2列的培训文件:

  

时间戳|值

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

你知道这个问题可能是什么原因吗?

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

# 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

为什么会这样?这个问题有解释吗?

1 个答案:

答案 0 :(得分:0)

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