Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 现实与预测之间的延迟差距_Python_Machine Learning_Tensorflow_Lstm_Tflearn - Fatal编程技术网

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

Python 现实与预测之间的延迟差距,python,machine-learning,tensorflow,lstm,tflearn,Python,Machine Learning,Tensorflow,Lstm,Tflearn,使用机器学习(作为我尝试过的Tensorflow和Tflearn(我知道这只是Tensorflow的一个包装))我试图预测下周某个地区的拥堵情况(如果你想了解更多的背景资料,请参阅我前面的问题)。我的训练集由400K个标记条目组成(日期为每分钟的拥塞值) 我的问题是,我现在的预测和现实之间有一个时间差 如果我必须用现实和预测画一张图表,你会看到我的预测,而它的形状与现实是一样的。她在现实面前增加/减少了。这让我开始觉得也许我的训练有问题。我的预测似乎不是从训练结束时开始的 我的两个数据集(培训/

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

我的问题是,我现在的预测和现实之间有一个时间差

如果我必须用现实和预测画一张图表,你会看到我的预测,而它的形状与现实是一样的。她在现实面前增加/减少了。这让我开始觉得也许我的训练有问题。我的预测似乎不是从训练结束时开始的

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

现在,一个糟糕的修复方法是从训练集中删除我所拥有的延迟值(举个例子,它将是7),它工作了,没有更多的延迟,但我不明白为什么我会有这个问题,或者如何修复它,这样以后就不会发生了

根据在不同网站上找到的一些建议,我的培训数据集中似乎有缺口(本例中缺少时间戳)可能是个问题,因为确实有一些(整个数据集中大约有7%到9%的时间戳缺失),我已经使用熊猫来添加缺少的时间戳(我也给了他们最后知道的时间戳的拥塞值)虽然我确实认为这可能有点帮助(差距更小),但它并没有解决问题

我尝试了多步骤预测、多元预测、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
这两种形状是:

(80485,1,1)

(80485,)

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

作为参数,我使用1个神经元,64个批次大小和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%,并且没有差距。

因为事实上我们不知道这些价值观,所以我不得不改变它。 我首先尝试使用培训集,但在这篇文章中解释了问题:


为什么会发生这种情况?有没有对此问题的解释?

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

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

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