如何找到两条曲线之间的相似性和相似度得分?

时间:2012-04-29 14:45:57

标签: matlab time-series similarity curves

我有两个数据集(t,y1)和(t,y2)。这些数据集在视觉上看起来相同,但它们是一些时间延迟或幅度变化。我想找到两条曲线之间的相似性(给出近似相似曲线的相似度1得分,不相似曲线得出0)。由于数据的振荡,一些曲线似乎不同。所以,我正在寻找找到曲线之间相似性的方法。我已经尝试在Matlab中使用渐变命令来找到每个时间步长的曲线斜率并进行比较。但它没有给我满意的结果。请有人建议我找到曲线之间相似性的方法。

先谢谢

enter image description here

4 个答案:

答案 0 :(得分:3)

此答案假设您的y1和y2是信号而不是曲线。后者我会尝试用POLYFIT进行参数化。

如果它们真的看起来一样,但是时间转移(并没有缠绕),那么你可以:

y1n=y1/norm(y1);
y2n=y2/norm(y2);
normratio=norm(y1)/norm(y2);
c=conv2(y1n,y2n,'same');
[val ind]=max(c);

ind 将指示时移和 normratio 的幅度差异。 两者都可以用作相似性度量的功能。然而,我假设您的信号实际上变化的不仅仅是时移或幅度,在这种情况下,某种信号参数化可能是更好的选择,然后在这些参数上建立度量。

在不了解您的数据的情况下,我首先尝试使用AR(假设像FFT或PRINCOMP那样典型的东西不起作用)。

答案 1 :(得分:3)

对于时间序列数据相似性测量,一种传统解决方案是DTW(动态时间扭曲)

答案 2 :(得分:0)

以下文章中的dv和dc距离可以解决您的问题。 http://bioinformatics.oxfordjournals.org/content/27/22/3135.full

答案 3 :(得分:0)

  1. Kolmongrov Smirnov测试(Matlab中的kstest2函数)
  2. Chi Square Test
  3. 测量相似度有一种称为MIC的度量:最大信息系数。它量化了2个数据或曲线之间共享的信息。