矩阵(mxn)的马哈拉诺比斯距离,其中m <n

时间:2016-08-25 02:55:45

标签: matlab matrix distance mahalanobis

=“”

我有12x202矩阵(12个实例具有202个特征)。我想计算每12个实例之间的马哈拉诺比斯距离,但似乎列的数量不能比实例(行)的数量大得多。 (我在计算12x11矩阵的距离时没有问题,但是使用linkage(X,'ward','mahalanobis');mahal(X,X);pdist2(X,X,'mahalanobis');时,超过11个特征会导致MATLAB出错

1 个答案:

答案 0 :(得分:0)

如果你查看matlab documentation mahal函数,它会说:

  

X和Y必须具有相同的列数,但可以有不同的列   行数。 X必须有多行而不是列。

我的统计数据不太好,所以我不确定为什么这个条件很重要,但我认为这是出于效率原因而且12项措施的数量太少,所以考虑更多的措施。

你可以做的就是自己计算mahalabonis的距离,很容易在同一个文档中得到编队,并且还给出了一个更好的计算mahalabanois距离的例子:

  

马哈拉诺比斯距离也称为二次距离。它测量   两组物体的分离。假设我们有两个小组   有手段,马哈拉诺比斯距离由以下

给出

对于不同的群体也是如此,而不是相同的。

无论如何你可以使用它:

function MD = my_MahalanobisDistance(X, Y)

[nX, mX] = size(X);
[nY, mY] = size(Y);

n = nX + nY;

if(mX ~= mY)
    disp('Columns in X must be same as in Y')
else
    xDiff = mean(X) - mean(Y);
    cX = my_covariance(X);
    cY = my_covariance(Y);
    pC = nX/n*cX + nY/n*cY;          
    MD = sqrt(xDiff * inv(pC) * xDiff');
end

和协方差:

function C = my_covariance(X) 
[n,m] = size(X); 
Xc = X -repmat(mean(X),n,1); 
C = Xc'* Xc/n;

我希望这可以帮助你