2016-08-25 10 views
1

У меня есть матрица 12x202 (12 экземпляров с 202 функциями). Я хочу рассчитать расстояние mahalanobis между каждыми 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 расстояние самостоятельно, легко получить formaula в том же документ, а также пример, который дает есть лучший расчет расстояния 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; 

Я надеюсь, что это поможет вам