MATLAB中两个向量之间的Mahalanobis距离

时间:2013-12-11 19:09:08

标签: matlab distance measure

我有以下两个向量,并试图找到它们之间的Mahalanobis距离。这两个向量如下:

A=[2,4,5,7];
B=[6,3,8,1];

为计算Mahalanobis distance,我做了以下事情:

> mahal(A(:),B(:))

为此,我得到了以下结果:

0.6466
0.0259
0.0259
0.6466

但是,如何计算one值,就像计算Euclidean距离时一样?

感谢。

1 个答案:

答案 0 :(得分:3)

马哈拉诺比斯距离实际上是与分布均值的距离。因此,如果没有分布,它就会变得与欧几里德距离相似(不相等)。

根据MATLAB:

mahal(Y,X)从矩阵X中的参考样本计算Y中每个观察的Mahalanobis距离(平方单位)。如果Y是n- by-m,其中n是观测数,m是数据的维数,d是n-by-1。 X和Y必须具有相同的列数,但可以具有不同的行数。 X必须有多行而不是列。

所以你会有这样的东西,你可以比较马哈拉诺比斯与欧几里德的距离:

X = mvnrnd([0;0],[1 .9;.9 1],100);
Y = [1 1;1 -1;-1 1;-1 -1];

d1 = mahal(Y,X) % Mahalanobis (**it still gives one value**)
d1 =
    1.3592
   21.1013
   23.8086
    1.4727

d2 = sum((Y-repmat(mean(X),4,1)).^2, 2) % Squared Euclidean
d2 =
    1.9310
    1.8821
    2.1228
    2.0739
% if you check the figure it will be easier to understand
scatter(X(:,1),X(:,2))
hold on
scatter(Y(:,1),Y(:,2),100,d1,'*','LineWidth',2)
hb = colorbar;
ylabel(hb,'Mahalanobis Distance')
legend('X','Y','Location','NW')

enter image description here

Mahalanobis距离(或其平方值的“广义平方点间距”)也可以定义为具有协方差矩阵S的相同分布的两个随机向量x和y之间的相异性度量:

enter image description here

如果协方差矩阵是单位矩阵,则马哈拉诺比斯距离减小到欧几里德距离。如果协方差矩阵是对角线,则得到的距离度量称为归一化欧氏距离:

enter image description here

其中Si是样品组中Xi和Yi的标准偏差。