【问题标题】:Mahalanobis distance between two vectors in MATLABMATLAB中两个向量之间的马氏距离
【发布时间】:2013-12-11 19:09:08
【问题描述】:

我有以下两个向量,并试图找到它们之间的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 距离时?

谢谢。

【问题讨论】:

  • 马氏距离不仅仅是一个向量距离。它是两个多元分布之间或向量与多元分布之间的统计距离。 mahal 实现了后者,针对多个样本向量进行了向量化。

标签: matlab distance measure


【解决方案1】:

马氏距离实际上是与分布均值的距离。因此,如果没有分布,它就会变得类似于(不等于)欧几里得距离。

根据 MA​​TLAB:

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 的标准差。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 2016-04-14
    • 1970-01-01
    • 2022-11-27
    • 2018-02-12
    • 2015-03-22
    • 2014-03-27
    相关资源
    最近更新 更多