马氏距离实际上是与分布均值的距离。因此,如果没有分布,它就会变得类似于(不等于)欧几里得距离。
根据 MATLAB:
mahal(Y,X) 计算 Y 中 每个观察 与矩阵 X 中的参考样本的马氏距离(平方单位)。如果 Y 是 n- by-m,其中 n 是观察次数,m 是数据的维度,d 是 n×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')
马氏距离(或其平方值的“广义平方点间距离”)也可以定义为具有协方差矩阵 S 的相同分布的两个随机向量 x 和 y 之间的相异性度量:
如果协方差矩阵是单位矩阵,则马氏距离减少到欧几里得距离。如果协方差矩阵是对角的,则得到的距离度量称为归一化欧几里得距离:
其中 Si 是样本集上 Xi 和 Yi 的标准差。