比较两个数据集的过程

5
我有两个数据集(以向量的形式),我将它们绘制在同一轴上,以查看它们之间的关系,并特别注意并寻找两个图形具有相似形状的地方(即两个图形在大约相同的间隔处具有看似正/负梯度的地方)。例如:
所迄今为止我一直在通过图形处理数据,但意识到由于数据量太大,每次想要检查两个集合如何在图形上相关时,绘图需要花费太多时间。
是否有任何想法、脚本或函数可以用来自动化这个过程?

2
根据数据的性质,我建议使用FFT函数进行频率分析。 (一定要了解如何在FFT域中正确缩放数据!)或者,使用像均方误差这样简单的东西也可能很有用。如果您能更多地介绍数据的性质和来源,我们可能能够给出更好的建议。 - thron of three
请注意,为了得到他想要的结果,他需要找到两个信号之间相位上的相似性,而不仅仅是频率上的相似性。这并不是一件简单的事情。 - Matt Phillips
2个回答

5
您需要考虑的第一件事是您想要应用于建立相似性的标准的性质。有很多方法来衡量相似性,您越能精确地描述在您的问题中“类似”意味着什么,无论使用哪种编程语言实现它都会更容易。
话虽如此,以下是您可以考虑的一些内容:
- 两个数据集的相关性 - 数据集导数之间的差异(但我认为这不够稳健) - 如@thron of three所提到的光谱分析 - 等等...
了解数据集的来源和变异性也可以在制定足够稳健的算法方面提供很大帮助。

1

好的。将您的两个向量称为A和B。

1) (可选)使用简单平均滤波器(Matlab“smooth”)或“filter”命令平滑数据。这将消除速度(“梯度”)中的局部变化,这些变化似乎基本上是噪声(如红色曲线的上升部分)。

2) 对A和B进行微分。现在,您直接表示每个向量的速度(Matlab“diff”)。

3) 将两个微分向量相加(逐元素)。将其称为C。

4) 查找C中所有绝对值高于某个阈值的点(您需要仔细观察数据以获得一个好的想法)。超过此阈值的点表示速度非常相似。

5) 现在查找高正值后面跟着高负值,或者反之亦然的位置。在这两个点之间,您将拥有A和B中类似的曲线。

注意:a)您可以在第3步之后进行平滑处理,而不是在第1步之后进行。b)关于第5点,您可能会遇到这样一种情况,即您的数据中的“山峰”位于向量的边缘,因此被“分成两半”,并且向量在下一个山峰上升之前降至基线。然后,第5点将错误地将该山峰识别为初始下降和随后上升之间的山峰。为了避免这种情况,您还可以要求A和B中的点在速度相似性的两个点之间具有高绝对值。

谢谢,这似乎是一条非常有趣的路线! - user718531

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接