【问题标题】:Mahalanobis distance for a matrix (mxn) with m<<nm<<n 的矩阵 (mxn) 的马氏距离
【发布时间】:2016-08-25 02:55:45
【问题描述】:

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

【问题讨论】:

标签: matlab matrix distance mahalanobis


【解决方案1】:

如果您查看 matlab documentation 的 mahal 函数,它会显示:

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

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

您可以做的事情是自己计算马哈拉巴尼距离,很容易在同一个文档中获得公式,并且给出的示例可以更好地计算马哈拉巴尼距离:

马氏距离也称为二次距离。它测量 两组对象的分离。假设我们有两组 均值 和 ,马氏距离由下式给出

所以是针对不同的组,而不是针对同一组。

在任何情况下你都可以使用这个:

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;

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-31
    • 2017-12-07
    • 2022-11-21
    • 2016-04-21
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多