用序列

时间:2018-04-20 14:29:39

标签: python tensorflow machine-learning keras time-series

我目前正在开展一个更大的项目。 目标是在时间序列中自动查找拆分点,将系列拆分为基本模式。

我有很多时间序列形式的训练数据,不同长度,并且分割点手动记录在有用的位置上。 基本上,我有xyz位置以及这些点在长度为2,25和50(dist2,{{dist25 {{}的居中窗口之间的距离1}},dist50)。我还将房间划分为3D网格,并找出位置所在的单元格(cell_xcell_ycell_z)。我认为这可能很有用,因为基本操作更可能在一个或两个单元格中。

Fig1

Fig2 cell_x,cell_y,cell_z基于大小50.垂直红线是训练数据的分裂点。

现在我想知道时间序列中的每个点是否是分裂点。

在我看来,这些都是足够的功能开始,但我认为我的Keras模型是不正确的,因为结果总是在0的时间序列索引中只有1。它基本上是基于过去和未来价值的二元分类问题。这就是我尝试用 LSTM 解决问题的原因。它看起来像这样:

model = Sequential()

model.add(LSTM(20, input_shape = (None, input_dim), return_sequences = True))
model.add(Dropout(0.5))
model.add(LSTM(20))
model.add(Dropout(0.5))
model.add(Dense(1, activation = 'sigmoid'))

model.compile(loss='binary_crossentropy',
            optimizer='adam',
            metrics=['accuracy'])

因为我在整个机器学习主题的最开始,而且大量的材料有点压倒性我在这里寻求一些帮助。我知道有很多其他的东西(糟糕的训练数据,错误的功能,错误的参数......)可能导致这个结果,但我想知道如何正确地为这个问题建立一个Keras模型。我已经找到了很多Keras的例子,但我不确定它们是否适合这个问题。

1 个答案:

答案 0 :(得分:2)

这对于评论来说太长了,所以我将其作为答案发布:

首先,原则上,您可以将数据提供给Keras的LSTM,并希望网络了解如何发现您所谓的分割点。有了足够的(标记的)数据,这似乎是一个有趣的项目,即使不平衡的类可能是一个问题(可以使用权重,重新采样技术或类似的东西来确定)!我相信所有这些已经在各种评论中说过了。如果您真的不关心时间维度,您可能还想尝试了解其他网络架构的表现。

在更一般的层面上,我想知道顺序神经网络是否是正确的方法。在时间序列计量经济学和相关领域中有许多经过试验和测试的方法。它们有各种名称,来自structural breakchange point或参数稳定性检测。如果您想确定新数据点是否属于不同的制度,那么在异常/异常值检测中可能会有一些您可能会发现有用的技术。要找到适合您特定设置的合适的统计测试(用于查找发生中断时的时间索引),您可能需要稍微深入actual literature,因为这些中只有少数是随时可用的开源软件包(即“少数”作为所有内容的一小部分)。我知道R包中有一些选项可用(clickclick),我确信Python中存在类似的东西,尽管我对Python中的statistics-packages不是很熟悉,所以即使他们肯定存在,我也无法联系到任何人。

如果您正在寻找易于访问的高级开源解决方案,有些人会发现facebook's prophet很有趣,这可以让您对时间序列进行建模,其中包括检测change points的能力。其他的事情,自动。我不确定您的标记分割点可以在多大程度上提供给模型以帮助学习这些点,但一个好的起点可能是查看自动检测到的点是否与您标记的点相似。