检测(嘈杂)数据集中的特定点

数据挖掘 机器学习 Python 数据分析
2022-02-17 20:24:17

在我最近的工作中,我遇到了一个问题,我需要在快速振荡的数据中找到某些点。让我们使用合成数据而不是实际测量值,暂时忽略噪声。这些点称为固定相点(简称 SPP)。对于人眼来说,它们很容易发现:振荡在局部减慢。一个例子:

看这张照片

需要注意的一些重要事项:

  • 它始终是局部最大值或最小值(因此可靠的峰值检测算法可以提供很大帮助,我最近一直在研究)

  • 该图理想地归一化为 [-1, 1],在实际测量中它有点失真

  • 通常在数据的边界处不满足Nyquist-Shannon 采样定理,并且振荡被平均化。(在我创建的合成数据中,它很满意,请参阅下面的真实数据集。)

  • SPP的一般数量是1或2,3或4确实很少见,但存在。

  • 一个 SPP 可以随着条件的变化在 x 方向上不断移动,可以在 x 轴的边界处消失,并且一个 SPP 可以分成两个彼此远离的不同 SPP。

主要目标是可靠地监控这些点的移动(理想情况下是实时的,但首先从 xy 数据检测 SPP 是目标)。还有一些其他生成的图表指示 SPP,最后一个来自真实数据。

第一 第二 第三 第 4 名

为了解决这个问题,我的第一个想法是检测数据中的所有极值点,然后生成它们的连续距离,当距离超过某个阈值时,它就是 SPP。但是设置一个好的阈值,正确识别极值点对于每个图来说似乎都非常困难和独特。

我的问题是: 你认为在那里使用机器学习工具是否值得,如果是,哪种算法最合适?作为一名物理学家,我经验不足,我只有基本的机器学习知识(但愿意学习!)一般来说,你能想到任何有用的算法或想法来解决这种情况吗?

注意:我主要是在 Python 中使用 numpy/scipy。

就局部最大值和最小值检测而言,我使用scipy.signal.find_peaksscipy.signal.find_peaks_cwt以及scipy.signal.savgol_filter.

1个回答

这是信号处理中的常见问题。研究信号处理中异常检测的丰富历史会很有用。

一种选择是应用傅里叶变换,将函数分解为其组成频率。定义一组基线频率。然后可以找到相对于基线的异常频率。