2013-08-23 43 views
5

Tôi có một bảng:Làm thế nào để có được sự tương đồng Jaccard trong matlab

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

tôi muốn để tính toán sự tương đồng Jaccard trong Matlab, giữa các vectơ A, B, C và D. Công thức là:

enter image description here

Trong công thức này | x | và | y | cho biết số lượng các mục không bằng 0. Ví dụ | A | số mục không bằng không là 2, cho | B | và | C | nó là 1, và cho | D | nó là 2.

| x giao nhau y | cho biết số lượng các mục phổ biến không phải là số không. | Một giao nhau B | là 0. | Giao nhau D | là 1, bởi vì giá trị của x trong cả hai không phải là số không.

ví dụ: jaccard (A, D) = 1/3 = 0.33

Tôi có thể thực hiện điều này trong Matlab bằng cách nào?

+0

@nkjt cảm ơn bạn. – sima412

Trả lời

5

Matlab có chức năng tích hợp tính toán khoảng cách Jaccard: pdist.

Dưới đây là một số mã

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

Một tính toán mà không yêu cầu các hộp công cụ thống kê

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

+1 sẽ đề xuất tương tự (mặc dù nó yêu cầu Hộp công cụ thống kê). – nkjt

+0

Có nhất thiết phải là trường hợp a, b là hợp lý không? –

+0

@Try Hard không nhất thiết, nhưng 'JD = pdist (rand (2.100), 'jaccard')' là '1', loại không mang tính thông tin! – marsei