2013-08-23 32 views
5

mam tabeli:Jak uzyskać Jaccard podobieństwa w Matlab

x y z 
A 2 0 3 
B 0 3 0  
C 0 0 4  
D 1 4 0 

że aby obliczyć podobieństwo Jaccard w Matlab pomiędzy wektorami A, B, C i D. Wzór brzmi:

enter image description here

W tym wzorze | x | i | y | wskazuje liczbę pozycji, które nie są zerowe. Na przykład | A | liczba pozycji, które nie wynosi zero, wynosi 2 dla | B | i | C | to 1, a dla | D | to 2.

| x przecinają y | wskazuje liczbę wspólnych elementów, które nie są zerowe. | Przecięcie B | jest 0. | Przecięcie D | wynosi 1, ponieważ wartość x w obu przypadkach nie wynosi zero.

np .: Jaccard (A, D) = 1/3 = 0,33

Jak można to realizować w Matlab?

+0

@nkjt dziękuję. – sima412

Odpowiedz

5

Matlab ma wbudowaną funkcję, która oblicza odległość Jaccard: pdist.

Oto kod

X = rand(2,100); 
X(X>0.5) = 1; 
X(X<=0.5) = 0; 

JD = pdist(X,'jaccard') % jaccard distance 
JI = 1 - JD;    % jaccard index 

EDIT

obliczenia, które nie wymagają statystycznych przybornik

a = X(1,:); 
b = X(2,:); 
JD = 1 - sum(a & b)/sum(a | b) 
+1

+1 miał sugerować to samo (chociaż wymaga zestawu narzędzi statystycznych). – nkjt

+0

Czy to konieczne, że a, b są logiczne? –

+0

@Spróbuj Trudno nie koniecznie, ale 'JD = pdist (rand (2100), 'jaccard')' jest '1', rodzaj nieinformatywny! – marsei