8

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

提前致谢

在此处输入图像描述

4

4 回答 4

5

对于时间序列数据相似度测量,一种传统的解决方案是 DTW(Dynamic Time Warpping)

于 2012-08-31T02:29:29.153 回答
4

这个答案假设您的 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 这样典型的东西不起作用)。

于 2012-04-29T21:13:38.697 回答
0

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

于 2014-04-15T09:55:13.343 回答
0
  1. Kolmongrov Smirnov 检验(kstest2Matlab 中的函数)
  2. 卡方检验
  3. 衡量相似度有一个衡量标准,叫做MIC:最大信息系数。它量化了 2 个数据或曲线之间共享的信息。
于 2015-11-17T15:35:43.543 回答