2013-08-23 17 views
5

Ho una tabella:Come ottenere somiglianza Jaccard in MATLAB

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

voglio calcolare la similarità Jaccard in Matlab, tra i vettori A, B, C e D. La formula è:

enter image description here

In questa formula | x | e | y | indica il numero di elementi che non sono zero. Ad esempio | A | il numero di elementi che non è zero è 2, per | B | e | C | è 1 e per | D | è 2.

| x intersezione y | indica il numero di elementi comuni che non sono zero. | Un intersezione B | è 0. | Un incrocio D | è 1, perché il valore di x in entrambi non è zero.

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

Come faccio a implementare questo in Matlab?

+0

@nkjt grazie. – sima412

risposta

5

Matlab ha una funzione incorporata che calcola la distanza di Jaccard: pdist.

Ecco il codice

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

Un calcolo che non richiede la casella degli strumenti statistica

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

+1 avrebbe suggerito lo stesso (anche se richiede gli strumenti di statistica). – nkjt

+0

È necessariamente il caso che a, b sono logici? –

+0

@Try Difficile non necessariamente, ma 'JD = pdist (rand (2.100), 'jaccard')' è '1', tipo di non informativo! – marsei

Problemi correlati