Я думаю, вы немного запутались в том, что делает mahal()
. Во-первых, для вычисления расстояния Махаланобиса требуется совокупность точек, по которым будет рассчитываться ковариация.
В документах Matlab для этой функции ясно указано, что расстояние вычислено:
d(I) = (Y(I,:)-mu)*inv(SIGMA)*(Y(I,:)-mu)'
где mu
— среднее значение совокупности X
, а SIGMA
— ковариационная матрица совокупности X
. Поскольку ваша популяция состоит из одной точки (происхождения), она не имеет ковариации, поэтому матрица SIGMA
необратима, отсюда и ошибка, когда вы получаете значения NaN/Inf на расстояниях.
Если вы знаете структуру ковариации, которую хотите использовать для расстояния Махаланобиса, вы можете просто использовать приведенную выше формулу, чтобы вычислить ее самостоятельно. Предположим, что интересующая вас ковариация хранится в матрице S
. Вы хотите, чтобы расстояние w.r.t. источник, поэтому вам не нужно ничего вычитать из значений в Y
, все, что вам нужно вычислить, это:
for ii = 1:size(Y,1)
d(ii) = Y(ii,:)*inv(S)*Y(ii,:)'; % Where Y(ii,:) is assumed to be a row vector.'
end
person
ely
schedule
16.04.2012
mahal
. - person PearsonArtPhoto   schedule 17.04.2012