繁体   English   中英

用于序列二进制分类的Keras LSTM模型

[英]Keras LSTM model for binary classification with sequences

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

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

图。1

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的例子,但我不确定它们是否适合这个问题。

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

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

在更一般的层面上,我想知道顺序神经网络是否是正确的方法。 在时间序列计量经济学和相关领域中有许多经过试验和测试的方法。 它们有各种名称,包括结构断裂变化点或参数稳定性检测。 如果您想确定新数据点是否属于不同的制度,那么在异常/异常值检测中可能会有一些您可能会发现有用的技术。 要找到适合您特定设置的合适的统计检验(用于找出发生中断时的时间指数),您可能需要对实际文献进行一些深入研究,因为其中只有少数可用于开源软件包(即“少数”作为所有内容的一部分)。 我知道R包中有一些选项可供选择( 点击点击 ),我确信在Python中存在类似的东西,虽然我不太熟悉Python中的statistics-packages,所以我无法链接到任何即使他们肯定存在。

如果您正在寻找一个易于访问的高级开源解决方案,有些人会发现Facebook的先知很有趣,它允许您建模时间序列,其中包括自动检测变化点等的能力。 我不确定您的标记分割点可以在多大程度上提供给模型以帮助学习这些点,但一个好的起点可能是查看自动检测到的点是否与您标记的点相似。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM