我有以下两个向量,并试图找到它们之间的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
距离时一样?
感谢。
答案 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')
Mahalanobis距离(或其平方值的“广义平方点间距”)也可以定义为具有协方差矩阵S的相同分布的两个随机向量x和y之间的相异性度量:
如果协方差矩阵是单位矩阵,则马哈拉诺比斯距离减小到欧几里德距离。如果协方差矩阵是对角线,则得到的距离度量称为归一化欧氏距离:
其中Si是样品组中Xi和Yi的标准偏差。