需要关于变化点(步骤)检测的建议

机器算法验证 时间序列 变化点
2022-04-08 17:36:09

我有一个包含很多步骤/跳跃的时间序列(此处的数据文件)。下面给出了一个情节。我想为这些方波特征中的每一个减去一个适当的值,以使它们回到信号的基线(即移除跳跃,以便获得平滑变化的信号)。中值滤波器非常适合连续去除少量异常值,但在这种情况下,我可能需要一种不同的方法,因为方波跳跃可以有不同的持续时间。我见过的一种常用方法是计算相邻样本的一阶差异,并寻找较大的差异来检测跳跃。我实现了这种方法,但问题是它经常失败,因为该方法的一个可调参数是阈值t为了检测跳跃,第一个差异必须交叉: 如下图所示,我的跳跃通常大小不同,因此恒定阈值不是最佳方法。特别是,在某些情况下,有一个有趣的信号,即相邻样本可以发生很大的变化而不会发生跳跃!我用红色突出显示了这样一个区域。

|xi+1xi|>t

时间序列

下面是红框区域的放大视图。您可以看到有一个方波跳跃,然后是一个有趣的信号。红色箭头描绘了一个位置,其中来自感兴趣信号的相邻样本之间的距离大于信号中的某些跳跃。因此,具有有限差分的恒定阈值方法对我不起作用。

有谁知道检测和减去方波跳跃以得到平滑变化的信号而没有跳跃的稳健程序?我确定这一定是一个已解决的问题,但我在网上搜索时运气不佳。

在此处输入图像描述


这并不完全是一个答案,而是试图进一步说明我在使用第一个差异方法时遇到的问题。在下图中,我关注与原始问题相同的区域。我添加了一条绿色中值滤波曲线(7 点居中窗口),以及红色中值滤波曲线的一阶差分曲线()。最后在蓝色中,我绘制了一个恒定的“阈值”值来识别一个步骤。 http://dropcanvas.com/d6jsb/1xi+1xi±4

您可以看到,第一个差异曲线(红色)很好地识别了跨步跳跃,但在 30:00 左右,红色曲线也超过了阈值,而实际上那里没有跳跃。由于时间序列稍后出现以下情况,我无法再增加阈值: 在此处输入图像描述 在这里,您可以看到连续两个步骤特征,其第一个差异没有完全通过±4临界点。所以这些跳跃没有被正确识别。所以问题变成了如何在存在阶跃的情况下“增强”一阶差分信号,同时在非阶跃情况下减少它,如上图第一张图。我的一个想法是计算前 N 个样本的中值绝对偏差 (MAD),并将第一个差值与 MAD 进行比较,而不是使用恒定阈值。但我也没有让这种方法很好地工作,因为有时 MAD 非常小,即使是适度的一阶差分值也会导致误报。

带有中值滤波器和一阶差分值的更新数据文件在此处我将不胜感激任何想法!

1个回答

我不知道您使用的是什么语言,但是对于 Matlab,我编写了这个基于 Shape 的过滤器这是一个“基于匹配的过滤器”。
Matlab 可以作为其他语言的伪代码阅读。

我为需要删除的锯齿图案编写了它,但也将其用于删除步骤。您匹配(删除)的形状是逐步上升和下降。假设 [0,0,0,0,1,1,1,1] 或 [1,1,1,1,0,0,0,0]