2013-08-23 2 views
5

У меня есть таблица:Как получить Jaccard сходство в MATLAB

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

Я хочу, чтобы вычислить сходство Jaccard в Matlab, между векторами A, B, C и D. Формула:

enter image description here

В этой формуле | x | и | y | указывает количество элементов, которые не равны нулю. Например: | A | количество элементов, которое не равно нулю, равно 2, для | B | и | C | она равна 1, а для | D | это 2.

| x пересекать y | указывает количество общих элементов, которые не равны нулю. | A пересекается с B | = 0. | A пересекается с D | равно 1, поскольку значение x в обоих случаях не равно нулю.

.: Jaccard например (А, D) = 1/3 = 0,33

Как можно реализовать это в Matlab?

+0

@nkjt спасибо. – sima412

ответ

5

Matlab имеет встроенную функцию, которая вычисляет расстояние Jaccard: pdist.

Вот код

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

Расчет, который не требует статистического инструментария

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

+1 собирался предложить то же самое (хотя для него требуется панель инструментов статистики). – nkjt

+0

Обязательно ли, что a, b логичны? –

+0

@Try Hard не обязательно, но 'JD = pdist (rand (2,100), 'jaccard')' '' '', это неинформативный! – marsei

Смежные вопросы