时间序列中的分类模式
Posted
技术标签:
【中文标题】时间序列中的分类模式【英文标题】:Classifying pattern in time series 【发布时间】:2021-02-01 03:54:55 【问题描述】:我正在处理时间序列数据中的重复模式。我的目标是将每个模式归类为 1,将不遵循该模式的任何内容归类为 0。该模式在每两个峰之间重复,如下图所示。
模式不一定在样本量上是固定的,而是保持在近似样本量内,比如 500 个样本 +-10%。峰的高度可以改变。随机信号(我称之为随机,但基本上是指不遵循模式形状)也可以改变值。
数据来自传感器。模式是设备正常工作的时候。如果设备出现故障,那么我将看不到这些模式,并且会得到类似于我在图像中显示的 0 类的东西。
到目前为止,我所做的是构建逻辑回归模型。以下是我的数据准备步骤:
在每两个连续峰值之间获取数据,将其重新采样到 100 个样本的固定大小,将数据缩放到 [0-1]。这是第 1 课。
对山谷之间的数据重复第 1 步并将其称为 0 类。
我产生了一些噪音,并在 500 个样本上重复了第 1 步,以构建额外的 0 类数据。
下图显示了我对测试数据集的预测。对噪声块的预测不是很好。我担心在真实数据中我可能会得到更多的误报。关于如何改进我的预测的任何想法?没有可用的 0 类数据时有什么更好的方法吗?
我见过类似的问题here。我对隐马尔可夫模型的理解有限,但我相信它是用来预测未来数据的。我的目标是对整个数据中包含 500 个样本的滑动窗口进行分类。
【问题讨论】:
【参考方案1】:我有一些建议,你可以试试。 首先,我认为在这个领域经常使用递归神经网络(例如 LSTM)。但我也听说有些人也使用基于树的方法,如 light gbm(我认为 Aileen Nielsen 使用这种方法)。
因此,如果您不想深入研究神经网络,这可能没有必要,因为您的信号似乎相对容易区分,您可以给 light gbm(或其他树集成方法)一个机会。
如果您知道正样本的最大长度,则可以定义成为输入向量的“滑动样本窗口”的长度(因此滑动窗口中的每个样本都成为一个输入特征),然后我会添加一个额外的属性,其中包含最后一个峰值出现时的样本数(在样本窗口之外/之前)。然后,您可以检查您让窗口在数据上滑动的步数。这也取决于您可用的内存。 但也许明智的做法是跳过正负变化之间的一些窗口,因为状态可能无法明确分类。
如果内存成为问题,神经网络可能是更好的选择,因为对于训练它们不需要一次性提供所有训练数据,因此您可以批量生成输入数据。对于基于树的方法,这种可能性不存在或仅以非常有限的方式存在。
【讨论】:
【参考方案2】:我不确定你想要达到什么目的。
如果你想表征什么是峰值——这是事后分类——那么你可以使用一个简单的规则来定义峰值,例如signal(t) - average(signal, t-N to t) > T
,T
一个特定的阈值和N
一些数据点来回顾。
这将限定什么是峰值(第 1 类)和非峰值(第 0 类),因此可以对模式进行分类。
如果您的目标是预测峰值将在之前几个时间单位发生(在时间 t),使用来自 t-n1
的数据t-n2
作为特征,那么逻辑回归可能不一定是最佳选择。
要找到正确的模型,您必须首先可视化每个 peak(t)
从 t-n1
到 t-n2
的特征,看看是否有任何模式可以找到。它可以是任何东西:
n3
天有峰值吗?
有趋势吗?
是否存在异常值(将您的数据转换为指数)
为了比较这些模式,可以考虑对它们进行规范化,例如,n2-n1
数据点从 0 变为 1。
如果您在视觉上找到一种模式,那么您就会知道哪种模型可能适用于哪些功能。
如果您不这样做,那么您添加的白噪声很可能会一样好。所以你可能找不到好的预测模型。
但是,您的底部图表还不错;在 > 15 个预测中,您只有 2 个主要误报。这暗示了更好的特征工程。
【讨论】:
以上是关于时间序列中的分类模式的主要内容,如果未能解决你的问题,请参考以下文章