Redian新闻
>
如何比较两条曲线的相似程度?
avatar
如何比较两条曲线的相似程度?# Computation - 科学计算
t*a
1
两列数,每列的个数相等.每列的数画成两根儿曲线,比较两线的相似程度.
比较标准: a.形状 b.值的大小.
只能用一个指标表示出来.
唉,其实有几十万条线,我得全比出来然后分类.
avatar
f*n
2
sum of square of error?

【在 t**********a 的大作中提到】
: 两列数,每列的个数相等.每列的数画成两根儿曲线,比较两线的相似程度.
: 比较标准: a.形状 b.值的大小.
: 只能用一个指标表示出来.
: 唉,其实有几十万条线,我得全比出来然后分类.

avatar
b*y
3
yes. or ,mean square deviation.

【在 f****n 的大作中提到】
: sum of square of error?
avatar
t*a
4
X=[x1, x2, ... xn]
Y=[y1, y2,... yn]
index = Sum( (xi-average(X))*(yi-average(Y)) )/ sqrt( sum((xi-average(X))^2 )
* sum ((xi-average(X))^2) )
不能反应曲线大小,例如将X乘2,结果一样
我需要一个既能反应大小又能反映形状得指标

【在 b*****y 的大作中提到】
: yes. or ,mean square deviation.
avatar
d*e
5
b用hausdorff distance吧.

【在 t**********a 的大作中提到】
: 两列数,每列的个数相等.每列的数画成两根儿曲线,比较两线的相似程度.
: 比较标准: a.形状 b.值的大小.
: 只能用一个指标表示出来.
: 唉,其实有几十万条线,我得全比出来然后分类.

avatar
d*e
6
需要先作geometric transformation.
scaling, shifting,....
a hard problem.

【在 t**********a 的大作中提到】
: X=[x1, x2, ... xn]
: Y=[y1, y2,... yn]
: index = Sum( (xi-average(X))*(yi-average(Y)) )/ sqrt( sum((xi-average(X))^2 )
: * sum ((xi-average(X))^2) )
: 不能反应曲线大小,例如将X乘2,结果一样
: 我需要一个既能反应大小又能反映形状得指标

avatar
f*n
7
how about no normalization?

【在 t**********a 的大作中提到】
: X=[x1, x2, ... xn]
: Y=[y1, y2,... yn]
: index = Sum( (xi-average(X))*(yi-average(Y)) )/ sqrt( sum((xi-average(X))^2 )
: * sum ((xi-average(X))^2) )
: 不能反应曲线大小,例如将X乘2,结果一样
: 我需要一个既能反应大小又能反映形状得指标

avatar
s*y
8

上面的不是corrcoef么? BTW: 分母的第二部分该是Y吧。
avatar
t*a
9
不能作normalize,因为数据的绝对值大小很重要,实际问题上我已经作了shifting,这里来
问的只假设shifting好后如何确定两曲线的shape和大小.

sum((xi-average(X))^2 )

【在 d******e 的大作中提到】
: 需要先作geometric transformation.
: scaling, shifting,....
: a hard problem.

avatar
t*a
10
谢谢大家回帖.
是啊,我前面帖子里已经作了 cross correlation,但是不能反映曲线的大小相差程度,即
index = Sum( (xi-average(X))*(yi-average(Y)) )/ sqrt( sum((xi-average(X))^2 )
* sum ((xi-average(Y))^2) )
但是cross correlation不能反应两列值的大小相差程度,例如将X乘2,结果一样.
另外一个指标,"曲线拟合度"(coefficient of effciency) 能够较好反映出而列数的值的
大小关系
index = 1- sum((xi-yi)^2)/sum( (yi-average(Y))^2 )
但是对于shape反映不好.我要做的曲线里除掉杂音后,一般有1到3个峰. 类似的曲线应该
峰的数量一致.

)
是Y,sorry
avatar
s*b
11
you are dealing with a "clustering" problem. you can find this topic from many
books on multivariable analysis or directly from some book on "clustrering".
The definition of distance between two curves should incorporate with the
problem you are working on. if you are sresearching on abstract curves, you
may consider general distance, l1,l2...et al.. for a specific problem you may
need specific wieght. Say, to emphasize "峰"的拟合 you may use weight abs(yi)
or a increasing function respect to yi,

【在 t**********a 的大作中提到】
: 谢谢大家回帖.
: 是啊,我前面帖子里已经作了 cross correlation,但是不能反映曲线的大小相差程度,即
: index = Sum( (xi-average(X))*(yi-average(Y)) )/ sqrt( sum((xi-average(X))^2 )
: * sum ((xi-average(Y))^2) )
: 但是cross correlation不能反应两列值的大小相差程度,例如将X乘2,结果一样.
: 另外一个指标,"曲线拟合度"(coefficient of effciency) 能够较好反映出而列数的值的
: 大小关系
: index = 1- sum((xi-yi)^2)/sum( (yi-average(Y))^2 )
: 但是对于shape反映不好.我要做的曲线里除掉杂音后,一般有1到3个峰. 类似的曲线应该
: 峰的数量一致.

avatar
s*y
12
你把问题发到google newsgroup看看有什么解答么?

【在 t**********a 的大作中提到】
: 谢谢大家回帖.
: 是啊,我前面帖子里已经作了 cross correlation,但是不能反映曲线的大小相差程度,即
: index = Sum( (xi-average(X))*(yi-average(Y)) )/ sqrt( sum((xi-average(X))^2 )
: * sum ((xi-average(Y))^2) )
: 但是cross correlation不能反应两列值的大小相差程度,例如将X乘2,结果一样.
: 另外一个指标,"曲线拟合度"(coefficient of effciency) 能够较好反映出而列数的值的
: 大小关系
: index = 1- sum((xi-yi)^2)/sum( (yi-average(Y))^2 )
: 但是对于shape反映不好.我要做的曲线里除掉杂音后,一般有1到3个峰. 类似的曲线应该
: 峰的数量一致.

avatar
s*y
13
X=[x1,x2,....]
Y=X/3=[x1/3, x2/3, ...];
Y2=X/10;
如果我我呢上面给的公式分别计算X and Y , X and Y2,
结果是一样的, 都是1。
这样就看不出来Y and Y2的不同了。 我哪里弄错了么?
BTW:
这个公式有名字或者什么reference么
我意思说如果在paper里用这个公式比较两条curve的相似度
(形状, 对应点的取值), 怎么说明我为什么要这么定义
这个公式呢?
谢谢
avatar
f*d
14
哦,对不起,我记忆中有点混淆,
但对你的情况,你直接用交叉关联的最大值就可以了,
在MATLAB中,你运行如下:
t=1:1000;
x=sin(2.*pi.*t.*30.*0.001);
y1=x./3;
y2=x./10;
cxy1=xcorr(x,y1,'none');
cxy2=xcorr(x,y2,'none');
max(cxy1)
ans =
166.6667
max(cxy2)
ans =
50

【在 s*******y 的大作中提到】
: X=[x1,x2,....]
: Y=X/3=[x1/3, x2/3, ...];
: Y2=X/10;
: 如果我我呢上面给的公式分别计算X and Y , X and Y2,
: 结果是一样的, 都是1。
: 这样就看不出来Y and Y2的不同了。 我哪里弄错了么?
: BTW:
: 这个公式有名字或者什么reference么
: 我意思说如果在paper里用这个公式比较两条curve的相似度
: (形状, 对应点的取值), 怎么说明我为什么要这么定义

avatar
s*g
15
不知有没有比较两个区面的相似程度的算法呢?有些好奇地说。

max(xcorr(x,y,'none'))/sqrt[(max(xcorr(x,x),'none')*max(xcorr(y,y),'none')]

【在 f**d 的大作中提到】
: 哦,对不起,我记忆中有点混淆,
: 但对你的情况,你直接用交叉关联的最大值就可以了,
: 在MATLAB中,你运行如下:
: t=1:1000;
: x=sin(2.*pi.*t.*30.*0.001);
: y1=x./3;
: y2=x./10;
: cxy1=xcorr(x,y1,'none');
: cxy2=xcorr(x,y2,'none');
: max(cxy1)

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。