Как рассчитать расстояние между двумя векторами на основе мер? - PullRequest
0 голосов
/ 03 января 2019

Я хочу вычислить среднее расстояние между каждым столбцом и другими столбцами в матрице, кроме себя.

Я написал этот код:

For i=1:m
  For j=1:m-1
    If(i==j)
      d=0;
    Else
      d=pdist2(a(:,i),a(:,j),'jaccard');
      s=sum(d)/(m-1);
    End
  End
End

Матрица nxm.

Я знаю, что функция pdist2 поддерживает некоторые меры расстояния, такие как jaccard, cosine, hamming, euclidean ....

Но если я хочу вычислить меры расстояния Канберры или Кларка или подобные им меры, я должен определитьфункция в pdist2 следующим образом:

D=pdist2(x,y,@distfun) 

Я хотел бы знать, как определить функцию расстояния для этих мер?


Редактировать: Цель состоит в том, чтобы затем эмпирически получить точкугде значения начинают уменьшаться, но цифры не показывают это ...

enter image description here

1 Ответ

0 голосов
/ 03 января 2019

Канберрское Расстояние определяется как

equation

Вы передаете два вектора столбца в pdist2, поэтому мы можем реализовать вышеприведенное уравнение как анонимную функцию, которая принимает входные данные вектора ...

fCanberraDist = @(p,q) sum( abs(p - q) ./ ( abs(p) + abs(q) ) );

Теперь у вас есть дескриптор функции, вы можете использовать следующее:

% ... previous code
d = pdist2( a(:,i), a(:,j), fCanberraDist );
% ... further code

Обратите внимание, что в настоящее время вы ничего не делаете со своим результатом, я предполагаю, что это только для примера кода.

Аналогичным образом вы можете определить любую другую пользовательскую меру расстояния как анонимную функцию или как полностью отдельную функцию (в своем собственном файле .m или определенную локально).

...