我应该转移数据集以将其用于 LSTM 回归吗?
Posted
技术标签:
【中文标题】我应该转移数据集以将其用于 LSTM 回归吗?【英文标题】:should I shift a dataset to use it for regression with LSTM? 【发布时间】:2020-04-09 22:47:30 【问题描述】:也许这是一个愚蠢的问题,但是当我用谷歌搜索它时,我并没有找到太多关于它的信息。
我有一个数据集,我将其用于回归,但使用 FFNN 的正常回归不起作用,所以我想为什么不尝试 LSTM,因为我的数据是时间相关的,我认为因为它是驾驶时来自车辆的标记,所以数据是单调的,也许我可以在这种情况下使用 LSTM 进行回归以预测连续值(如果这没有意义,请告诉我)。
现在第一步是准备我的数据以使用 LSTM,因为我会预测未来,我认为我的目标(基本事实或标签)应该向上移动,对吗?
因此,如果我有一个 pandas 数据框,其中每一行都包含特征和目标(在行的末尾),我假设特征应该保持在原处,并且目标会向上移动一步,以便第一行的特征将对应于第二行的目标(我错了)。
通过这种方式,LSTM 将能够从这些特征中预测未来的价值。
我在互联网上没有找到太多关于此的内容,所以请您提供我如何使用一些代码来做到这一点?
我也知道我可以使用 pandas.DataFrame.shift
来移动数据集,但我认为最后一个值将保持 NaN!如何处理?如果您向我展示一些示例或代码,那就太好了。
【问题讨论】:
【参考方案1】:我们可能需要有关您正在使用的数据的更多信息。另外,我建议在开始使用 LSTM 之前先使用更简单的循环神经网络。这些网络的工作方式是你输入第一个信息,然后输入下一个信息,然后输入下一个信息,等等。假设当你输入第一个信息时,它发生在时间t
,然后第二位信息在时间t+1
...等被馈送,直到时间t+n
。
您可以让神经网络在每个时间步输出一个值(因此在每个相应的输入完成后,在时间t
、t+1
...t+n
输出一个值馈入)。这是一个多对多的网络。或者,您可以在提供所有输入后让神经网络输出一个值(即在时间t+n
输出该值)。这称为多对一网络。您需要什么取决于您的用例。
例如,假设您每 100 毫秒记录一次车辆行为,并且在 10 秒后(即第 100 个时间步长),您想要预测驾驶员受到酒精影响的可能性。在这种情况下,您将使用多对一网络,在该网络中,您可以在后续时间步骤中输入后续车辆行为记录(第一次记录在时间t
,然后在时间t+1
等下一次记录),然后最后一个时间步有概率值输出。
如果您希望在每个时间步之后输出一个值,则使用多对多设计。也可以每隔k
时间步输出一个值。
【讨论】:
谢谢,是的,我知道所有问题,但问题是,我应该让我的数据集保持现在的样子还是应该向上或向下移动它?我的意思是,当我使用前馈神经网络时,我什么都不应该改变,因为我预测的是当前值,但 LSTM 预测的是未来值,这正是我将目标值上下移动的意思。我希望你明白我的意思 正如我所说,这取决于您要预测的内容。你需要多对一还是多对多的 LSTM? 我有 5 个功能和 1 个输出。数据是驾驶时的令牌。特征是速度,车辆的加速度,时间戳,偏航率和车轮角度,输出是当时的位置。数据是熊猫数据框,其中每一行对应一个时间 t。现在如果我想使用 lstm 我想我必须改变我的目标(位置)才能转移到未来还是我错了?如果我让数据集像现在这样,使用 LSTM 没有意义,因为没有时间偏移,所有数据都在时间 t 还是我错了? 我将重新表述我的问题,您希望神经网络有多少个输出,每个时间步一个?如果是这样,我想,那么你就不会改变任何东西并保持原样。这是因为在给定时间步“t”的位置输出的情况下,LSTM 将学习预测时间步“t+1”的位置输出。数据不是全部在时间't',第一行是't',第二行是't+1',第三行是't+2'等等。 是的,你是对的,第一行是 t,第二行是 t+1 等等。所以我不应该转移数据?如果我在时间 t 向 lstm 提供特征和目标,lstm 将如何预测下一个输出说 t+1?对于时间 t 的特征,目标不应该是 t+1 吗?因此例如损失可以计算为预测输出的均方误差,在 t+1 和目标也应该在 t+1?以上是关于我应该转移数据集以将其用于 LSTM 回归吗?的主要内容,如果未能解决你的问题,请参考以下文章
Sklearn train_test_split 拆分数据集以将预测标签与地面实况标签进行比较