2016-08-25 69 views
1

我有一個12x202矩陣(12個實例有202個特徵)。我想計算每個12個實例之間的馬氏距離,但似乎列數不能比實例數(行數)大很多。 (我不得不使用沒有問題的計算12x11矩陣但超過11個特徵的距離會導致錯誤的MATLAB要麼linkage(X,'ward','mahalanobis');mahal(X,X);pdist2(X,X,'mahalanobis');矩陣(mxn)的馬氏距離m << n

+0

你能做出[最低工作示例](請http://stackoverflow.com/help/mcve)? –

回答

0

如果在matlab documentation對泰姬陵的功能看,它說:

X和Y必須具有相同的列數,但可以具有不同的 行數。 X必須具有比列多的行。

我在統計上不太好,所以我不確定這個條件爲什麼重要,但我想這是出於效率的原因,還有12個措施數量太少,所以考慮有更多的措施。

,你可以做的事情是計算mahalabonis距離自己,這是很容易得到在同一文檔,讓沒有爲mahalabanois距離更好的計算formaula,也是例子:

馬氏距離也稱爲二次距離。它測量 兩組對象的分離。假設我們有兩個組 與手段,馬氏距離由以下

給出所以對於不同的組,而不是相同的。

在任何情況下,你可以這樣做:

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; 

我希望這可以幫助你