我想计算输入特征向量Y (1x14)到矩阵X (18x14)中所有特征向量的mahalanobis距离。X的每6个向量代表一个类(所以我有3个类)。然后,基于mahalanobis距离,我将选择离输入最近的向量,并将其分类为三个类中的一个。
我的问题是,当我使用下面的代码时,我只得到一个值。怎样才能得到输入Y和X中每个向量之间的mahalanobis距离,最后我有18个值,然后选择最小的一个。任何帮助都将不胜感激。谢谢。
注意:我知道mahalanobis距离是点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函数时,我得到了一个错误:警告:矩阵接近奇异或严重缩放。结果可能不准确。
发布于 2016-01-15 21:07:22
如果您必须自己实现距离(例如学校作业),这对您绝对没有任何用处,但是如果您只需要计算距离作为其他计算的中间步骤,我强烈建议d = Pdist2(a,b, distance_measure)文档在matlabs站点上。
它计算向量(甚至矩阵) b与a中所有元素之间的成对距离,并将它们存储在向量d中,其中列对应于b中的条目,行是来自a的条目。所以d(i,j)是row j中的b和row i中的a (希望有意义)之间的距离。如果您希望它甚至可以参数来找到k最近的邻居,这是一个很好的函数。
在您的示例中,您将使用以下代码,并最终得到元素之间的距离以及索引
%number of neighbors
K = 1;
% X=18x14, Y=1x14, dist=18x1
[dist, iidx] = pdist2(X,Y,'mahalanobis','smallest',K);
%to find the class, you can do something like this
num_samples_per_class = 6;
matching_class = ceil(iidx/ num_samples_per_class);https://stackoverflow.com/questions/34817240
复制相似问题