首页 文章

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

提问于
浏览
1

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

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

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

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

现在,一个糟糕的解决方法是从训练集中移除尽可能多的延迟值(以此为例,它将是7)并且它有效,没有更多延迟但我不明白为什么我有这个问题或者如何修复它以便以后不会发生 .

根据在不同网站上发现的一些建议,似乎我的训练数据集中存在差距(在这种情况下缺少时间戳)可能是一个问题,看到确实存在一些问题(总共大约7%到9%的整个数据集丢失了)I已经使用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

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

相关问题