我有12x202矩阵(12个实例具有202个特征)。我想计算每12个实例之间的马哈拉诺比斯距离,但似乎列的数量不能比实例(行)的数量大得多。 (我在计算12x11矩阵的距离时没有问题,但是使用linkage(X,'ward','mahalanobis');
或mahal(X,X);
或pdist2(X,X,'mahalanobis');
时,超过11个特征会导致MATLAB出错
答案 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;
我希望这可以帮助你