如何衡量两个数据的相似性

时间:2015-02-13 07:52:24

标签: matlab

我正在测量两个相同大小的数据的相似度是20.那就是

A=[0.915450999999999    0.908220499999997   0.900374999999996   0.890547499999996   0.880455499999997   0.868436999999998   0.853787499999999   0.836066499999999   0.815514999999999   0.785924499999999   0.661612000000002   0.208405500000000   0.0495730000000000  0.0148525000000000  0.00604500000000001 0.00292150000000000 0.00150100000000000 0.000730999999999999    0.000431999999999999    0.000222999999999999]

B=[0.915971250000000    0.909765000000000   0.902468749999999   0.894108749999999   0.883719999999998   0.871347499999999   0.857477500000000   0.841131250000000   0.821846250000000   0.796526250000000   0.673128750000000   0.208027500000000   0.0520962500000000  0.0187462500000000  0.00634375000000000 0.00295500000000000 0.00134500000000000 0.000226250000000000    0.000150000000000000    0.000113750000000000]

你能帮我在matlab中计算一下吗?如果它们相似则结果显示1,否则0是不同的。 enter image description here 预先感谢。

2 个答案:

答案 0 :(得分:3)

MATLAB中用于计算向量之间距离的最佳解决方案是pdist方法:

http://www.mathworks.com/help/stats/pdist.html

它可以使用多个指标,并且它已经过很好的优化。在文档中,这些指标描述得非常好。

pdist将所有行向量与矩阵中的所有行向量进行比较,并返回所有这些距离。对于两个向量,您必须将它们放在矩阵中,并且必须使用此矩阵作为输入参数调用pdist方法:

% A and B are the vectors of your example
X = [A; B];
D = pdist(X, 'cosine'); % D = 1.0875e-005

如果使用包含更多行的矩阵调用pdist,则输出也将是向量。例如:

% A and B are the vectors of your example
X = [A; A; B; B];
D = pdist(X, 'cosine');
% D = 1.0e-004 * [0    0.1087    0.1087    0.1087    0.1087    0.0000]
D(1)(第2行第1行)相比,

AA

D(2) AB相比(第3行第3行)。

D(3)A进行比较(第1行和第4行)。

B(第3行第2行)相比,

D(4)A

B(第4行第2行)相比,

D(5)A

B(第4行和第4行)相比,

D(6)B

几年前,我们实施了一个模拟环境,其中比较了从虚拟线扫描相机继承的几个向量,并且我们使用了这种方法。它运作得很好。

答案 1 :(得分:1)

根据建议here,您可以使用余弦相似度,它可以找到两个向量之间的角度。类似的向量具有接近1的值,而不相似的向量具有接近于0的值。

function d = cosSimilarity(u, v)
    d = dot(u,v)/(norm(u)*norm(v));
end