scipy.spatial.distance.

jaccard#

scipy.spatial.distance.jaccard(u, v, w=None)[источник]#

Вычисление расстояния Жаккара между двумя булевыми векторами.

Даны булевы векторы \(u \equiv (u_1, \cdots, u_n)\) и \(v \equiv (v_1, \cdots, v_n)\) которые не равны нулю одновременно, их Расстояние Жаккара определяется как ([1], стр. 26)

\[d_\textrm{jaccard}(u, v) := \frac{c_{10} + c_{01}} {c_{11} + c_{10} + c_{01}}\]

где

\[c_{ij} := \sum_{1 \le k \le n, u_k=i, v_k=j} 1\]

для \(i, j \in \{ 0, 1\}\). Если \(u\) и \(v\) если оба равны нулю, их несходство Жаккара определяется как ноль. [2]

Если (неотрицательный) вектор весов \(w \equiv (w_1, \cdots, w_n)\) предоставляется, то взвешенное расстояние Жаккара определяется аналогично, но с \(c_{ij}\) заменено на

\[\tilde{c}_{ij} := \sum_{1 \le k \le n, u_k=i, v_k=j} w_k\]
Параметры:
u(N,) array_like из bool

Входной вектор.

v(N,) array_like из bool

Входной вектор.

w(N,) array_like из чисел с плавающей запятой, необязательный

Веса для каждой пары \((u_k, v_k)\). По умолчанию None, что дает каждой паре вес 1.0.

Возвращает:
jaccardfloat

Расстояние Жаккара между векторами u и v, опционально взвешенная по w если предоставлен.

Примечания

Расстояние Жаккара удовлетворяет неравенству треугольника и квалифицируется как метрика. [2]

The Индекс Жаккара, или Коэффициент сходства Жаккара, равен единице минус несходство Жаккара. [3]

Различие между общими (конечными) множествами может быть вычислено путём кодирования их в виде булевых векторов и вычисления различия между закодированными векторами. Например, подмножества \(A,B\) of \(\{ 1, 2, ..., n \}\) может быть закодировано в булевы векторы \(u, v\) установкой \(u_k := 1_{k \in A}\), \(v_k := 1_{k \in B}\) для \(k = 1,2,\cdots,n\).

Изменено в версии 1.2.0: Ранее, если все (положительно взвешенные) элементы в u и v равны нулю, функция вернёт nan. Это было изменено, чтобы возвращать 0 вместо этого.

Изменено в версии 1.15.0: Не 0/1 числовой ввод, используемый для получения специального результата. Начиная с версии 1.15.0, числовой ввод преобразуется в логический перед вычислением.

Ссылки

[1]

Кауфман, Л. и Руссеув, П. Дж. (1990). «Нахождение групп в данных: Введение в кластерный анализ». John Wiley & Sons, Inc.

[2] (1,2)

Kosub, S. (2019). “A note on the triangle inequality for the Jaccard distance.” Pattern Recognition Letters, 120:36-38.

Примеры

>>> from scipy.spatial import distance

Ненулевые векторы без совпадающих 1 имеют несходство 1.0:

>>> distance.jaccard([1, 0, 0], [0, 1, 0])
1.0

Векторы с некоторыми совпадающими единицами имеют несходство менее 1.0:

>>> distance.jaccard([1, 0, 0, 0], [1, 1, 1, 0])
0.6666666666666666

Идентичные векторы, включая нулевые векторы, имеют несходство 0.0:

>>> distance.jaccard([1, 0, 0], [1, 0, 0])
0.0
>>> distance.jaccard([0, 0, 0], [0, 0, 0])
0.0

Следующий пример вычисляет несходство непосредственно из матрицы ошибок, устанавливая вектор весов в частоты Истинно Положительных, Ложно Отрицательных, Ложно Положительных и Истинно Отрицательных случаев:

>>> distance.jaccard([1, 1, 0, 0], [1, 0, 1, 0], [31, 41, 59, 26])
0.7633587786259542  # (41+59)/(31+41+59)