Matlab中的Mahalanobis距离

时间:2016-01-15 18:13:26

标签: matlab image-processing classification distance mahalanobis

我想计算输入特征向量Y(1x14)与矩阵X(18x14)中所有特征向量的马哈拉诺比斯距离。 X的每6个向量代表一个类(所以我有3个类)。然后根据马哈拉诺比斯距离,我将选择最接近输入的向量,并将其分类为三个类别中的一个。

我的问题是,当我使用以下代码时,我只得到一个值。如何在输入Y和X中的每个向量之间获得马哈拉诺比斯距离。所以最后我有18个值,然后我选择最小的值。任何帮助将不胜感激。谢谢。

注意:我知道马哈拉诺比斯距离是点P和分布D之间距离的度量,但我不知道如何在我的情况下应用它。

Y = test1;         % Y: 1x14 vector 
S = cov(X);        % X: 18x14 matrix 
mu = mean(X,1);
d = ((Y-mu)/S)*(Y-mu)' 

我也尝试将矩阵X分成3;所以每一个都代表一个类的特征向量。这是代码,但它不能正常工作,我有3个距离,有些有负值!

 Y = test1;
 X1 = Action1;
 S1 = cov(X1);
 mu1 = mean(X1,1);
 d1 = ((Y-mu1)/S1)*(Y-mu1)' 

 X2 = Action2;
 S2 = cov(X2);
 mu2 = mean(X2,1);
 d2 = ((Y-mu2)/S2)*(Y-mu2)'

 X3= Action3;
 S3 = cov(X3);
 mu3 = mean(X3,1);
 d3 = ((Y-mu3)/S3)*(Y-mu3)' 


d= [d1,d2,d3];
MahalanobisDist= min(d)

最后一件事,当我使用Matlab提供的mahal函数时,我遇到了这个错误: 警告:矩阵接近单一或严重缩放。结果可能不准确。

1 个答案:

答案 0 :(得分:0)

如果您必须自己实施距离(例如学校作业),这对您来说绝对没用,但如果您只是需要计算距离作为其他计算的中间步骤,我强烈建议d = Pdist2(a,b, distance_measure)文档在matlabs site

它计算向量(甚至矩阵)ba中所有元素之间的成对距离,并将它们存储在向量d中,其中列对应{{1}中的条目1}},行是来自b的条目。所以d(i,j)是arow jbrow i之间的距离(希望有意义)。如果你想要它甚至可以找到a最近邻居的参数,那么这是一个很好的功能。

在你的情况下,你将使用以下代码,你最终得到元素之间的距离,以及索引

k