矩阵 (mxn) 的马氏距离为 m<<n



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

如果你在matlab文档中查看mahal函数,它说:

X和Y的列数必须相同,但可以不同行数。X的行数必须大于列数

我不太擅长统计,所以我不确定为什么这个条件很重要,但我想这是出于效率的原因,而且12个指标太少了,所以考虑更多的指标。

你可以自己计算mahalabanis距离,在同一文档中很容易得到公式,并且给出了一个更好的计算mahalabanis距离的例子:

马氏距离又称二次距离。它的措施两组物体的分离。假设我们有两组,马氏距离由

给出

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

在任何情况下你都可以这样写:

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;

我希望这对你有帮助

相关内容

最新更新