我试图从原点找到一些点的Mahalanobis距离.MATLAB命令是mahal(Y,X)
但是如果我使用这个,我得到NaN作为矩阵X = 0,因为需要从原点找到距离。有人可以帮我解决这个问题。怎么做呢
答案 0 :(得分:3)
我认为你对mahal()
正在做的事情感到有点困惑。首先,计算马哈拉诺比斯距离需要一组点,从中计算协方差。
在Matlab docs for this function中,它清楚地表明计算的距离为:
d(I) = (Y(I,:)-mu)*inv(SIGMA)*(Y(I,:)-mu)'
其中mu
是X
的人口平均值,SIGMA
是X
的人口协方差矩阵。由于您的总体由单个点(原点)组成,因此它没有协方差,因此SIGMA
矩阵不可逆,因此在距离中获得NaN / Inf值的误差。
如果您知道要用于Mahalanobis距离的协方差结构,那么您可以使用上面的公式为自己计算它。让我们说你关心的协方差存储在矩阵S
中。你想要距离w.r.t.原点,所以你不需要从Y
中的值中减去任何东西,你需要计算的是:
for ii = 1:size(Y,1)
d(ii) = Y(ii,:)*inv(S)*Y(ii,:)'; % Where Y(ii,:) is assumed to be a row vector.'
end