DistanceMetric#

класс sklearn.metrics.DistanceMetric#

Унифицированный интерфейс для быстрых функций метрики расстояния.

The DistanceMetric класс предоставляет удобный способ вычисления попарных расстояний между образцами. Он поддерживает различные метрики расстояний, такие как евклидово расстояние, расстояние Манхэттена и другие.

The pairwise метод может использоваться для вычисления попарных расстояний между образцами во входных массивах. Он возвращает матрицу расстояний, представляющую расстояния между всеми парами образцов.

The get_metric метод позволяет получить конкретную метрику, используя её строковый идентификатор.

Примеры

>>> from sklearn.metrics import DistanceMetric
>>> dist = DistanceMetric.get_metric('euclidean')
>>> X = [[1, 2], [3, 4], [5, 6]]
>>> Y = [[7, 8], [9, 10]]
>>> dist.pairwise(X,Y)
array([[7.81..., 10.63...]
       [5.65...,  8.48...]
       [1.41...,  4.24...]])

Доступные метрики

Ниже приведены идентификаторы строковых метрик и связанные с ними классы метрик расстояния:

Метрики, предназначенные для вещественных векторных пространств:

идентификатор

имя класса

args

функция расстояния

“euclidean”

EuclideanDistance

sqrt(sum((x - y)^2))

“manhattan”

ManhattanDistance

sum(|x - y|)

“чебышев”

Расстояние Чебышёва

max(|x - y|)

«minkowski»

MinkowskiDistance

p, w

sum(w * |x - y|^p)^(1/p)

“seuclidean”

SEuclideanDistance

V

sqrt(sum((x - y)^2 / V))

“mahalanobis”

Расстояние Махаланобиса

V или VI

sqrt((x - y)' V^-1 (x - y))

Метрики, предназначенные для двумерных векторных пространств: Обратите внимание, что метрика расстояния гаверсинуса требует данных в виде [широта, долгота], и как входные, так и выходные данные указаны в радианах.

идентификатор

имя класса

функция расстояния

“haversine”

HaversineDistance

2 arcsin(sqrt(sin^2(0.5*dx) + cos(x1)cos(x2)sin^2(0.5*dy)))

Метрики, предназначенные для векторных пространств с целочисленными значениями: Хотя предназначены для целочисленных векторов, эти метрики также действительны в случае вещественных векторов.

идентификатор

имя класса

функция расстояния

'hamming'

HammingDistance

N_unequal(x, y) / N_tot

“canberra”

CanberraDistance

sum(|x - y| / (|x| + |y|))

“braycurtis”

Расстояние Брея-Кертиса

sum(|x - y|) / (sum(|x|) + sum(|y|))

Метрики, предназначенные для булевых векторных пространств: Любой ненулевой элемент оценивается как «Истина». В приведённых ниже списках используются следующие сокращения:

  • N: количество измерений

  • NTT: количество измерений, в которых оба значения True

  • NTF: количество измерений, в которых первое значение True, второе False

  • NFT: количество измерений, в которых первое значение False, второе True

  • NFF: количество измерений, в которых оба значения равны False

  • NNEQ: количество неравных измерений, NNEQ = NTF + NFT

  • NNZ: количество ненулевых измерений, NNZ = NTF + NFT + NTT

идентификатор

имя класса

функция расстояния

“jaccard”

JaccardDistance

NNEQ / NNZ

“соответствие”

MatchingDistance

NNEQ / N

“dice”

Расстояние Dice

NNEQ / (NTT + NNZ)

«кульсинский»

KulsinskiDistance

(NNEQ + N - NTT) / (NNEQ + N)

«rogerstanimoto»

RogersTanimotoDistance

2 * NNEQ / (N + NNEQ)

“russellrao”

RussellRaoDistance

(N - NTT) / N

“sokalmichener”

. Первое — количество деревьев в лесу. Чем больше, тем лучше, но и тем дольше будет вычисление. Кроме того, результаты перестают значительно улучшаться после критического числа деревьев. Второе — размер случайных подмножеств признаков, рассматриваемых при разделении узла. Чем ниже, тем больше снижение дисперсии, но и больше увеличение смещения. Эмпирически хорошие значения по умолчанию:

2 * NNEQ / (N + NNEQ)

“sokalsneath”

SokalSneathDistance

NNEQ / (NNEQ + 0.5 * NTT)

Пользовательское расстояние:

идентификатор

имя класса

args

"pyfunc"

PyFuncDistance

функция

Здесь func является функцией, которая принимает два одномерных массива numpy и возвращает расстояние. Обратите внимание, что для использования в BallTree расстояние должно быть истинной метрикой: т.е. оно должно удовлетворять следующим свойствам

  1. Неотрицательность: d(x, y) >= 0

  2. Тождество: d(x, y) = 0 тогда и только тогда, когда x == y

  3. Симметрия: d(x, y) = d(y, x)

  4. Неравенство треугольника: d(x, y) + d(y, z) >= d(x, z)

Из-за накладных расходов на вызов python-функции в объекте Python, это будет довольно медленно, но будет иметь то же масштабирование, что и другие расстояния.

метод класса get_metric(метрика, dtype= 'numpy.float64'>, **kwargs)#

Получить заданную метрику расстояния из строкового идентификатора.

Смотрите документацию DistanceMetric для списка доступных метрик.

Параметры:
метрикаstr или имя класса

Строковый идентификатор или имя класса желаемой метрики расстояния. См. документацию DistanceMetric класс для списка доступных метрик.

dtype{np.float32, np.float64}, по умолчанию=np.float64

Тип данных входных данных, к которым будет применяться метрика. Это влияет на точность вычисленных расстояний. По умолчанию установлено np.float64.

**kwargs

Дополнительные ключевые аргументы, которые будут переданы запрошенной метрике. Эти аргументы могут использоваться для настройки поведения конкретной метрики.

Возвращает:
metric_objэкземпляр запрошенной метрики

Экземпляр запрошенного класса метрики расстояния.