10 дистанционных мер для машинного обучения, о которых вы должны были слышать

Меры расстояния являются основой для контролируемых и неконтролируемых алгоритмов обучения, включая K-ближайших соседей, самоорганизующиеся карты, машины опорных векторов и кластеризацию K-средних.

Выбор меры расстояния влияет на результаты нашего машинного обучения, поэтому важно подумать о том, какая мера больше всего подходит для решения задачи. Следовательно, мы должны быть осторожны в выборе меры, которую следует использовать.

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

Следовательно, эта статья даст вам краткое введение в часто используемые меры расстояния, как они работают, как их вычислить с помощью Python и когда они используются. Благодаря этому вы можете углубить свои знания и понимание, улучшив алгоритмы и результаты машинного обучения.

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

Как следует из их названия, меры расстояния используются для вычисления разницы между двумя объектами в заданном проблемном пространстве, т. е. функциями в наборе данных. Затем это расстояние можно использовать для определения сходства между признаками. Чем меньше расстояние, тем более похожи черты.

Мы можем выбирать между геометрическими и статистическими мерами расстояния. Какую меру расстояния нам следует выбрать, зависит от типа данных. Объекты могут иметь разные типы данных (например, действительные значения, логические значения, категориальные), данные могут быть многомерными или состоять из геопространственных данных.

Геометрические меры расстояния

Евклидово расстояние

Евклидово расстояние измеряет кратчайшее расстояние между двумя векторами с действительными значениями. Из-за интуитивно понятного использования, простой реализации и хороших результатов во многих случаях это наиболее распространенная мера расстояния и мера расстояния по умолчанию во многих приложениях.

Евклидово расстояние также может называться L2-нормой и рассчитывается как:

Чтобы рассчитать расстояние между векторами в Python, мы можем использовать

from scipy.spatial import distance
distance.euclidean(vector_1, vector_2)

Евклидово расстояние имеет два основных недостатка. Во-первых, мера расстояния плохо работает для данных большего размера, чем двухмерное или трехмерное пространство. Во-вторых, если мы не нормализуем и/или не стандартизируем наши характеристики, расстояние может быть искажено из-за разных единиц измерения.

Манхэттенское расстояние

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

Манхэттенское расстояние основано на норме L1 и рассчитывается по формуле:

и может быть реализован на Python с помощью:

from scipy.spatial import distance
distance.cityblock(vector_1, vector_2)

Манхэттенское расстояние имеет два основных недостатка. Во-первых, оно менее интуитивно понятно, чем евклидово расстояние в многомерном пространстве, а во-вторых, оно не показывает кратчайший возможный путь. Хотя это не может быть проблемой, мы должны знать о более высоком расстоянии.

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

Расстояние Чебышева также называют расстоянием шахматной доски, так как это наибольшее расстояние в любом измерении между двумя векторами с действительными значениями. Мера расстояния часто используется в складской логистике, где самый длинный путь определяет время, необходимое для перехода из одной точки в другую.

Расстояние Чебышева рассчитывается по L-норме бесконечности:

Мы можем рассчитать расстояние в Python:

from scipy.spatial import distance
distance.chebyshev(vector_1, vector_2)

Расстояние Чебышева имеет только очень специфический вариант использования и поэтому используется очень редко.

расстояние Минковского

Расстояние Минковского является обобщенной формой вышеупомянутых мер расстояния. Следовательно, его можно использовать для тех же вариантов использования, обеспечивая при этом высокую гибкость. Мы можем выбрать значение p, чтобы найти наиболее подходящую меру расстояния.

Расстояние Минковского вычисляется по формуле:

и мы можем определить расстояние в Python:

from scipy.spatial import distance
distance.minkowski(vector_1, vector_2, p)

Поскольку расстояние Минковского представляет собой разные меры расстояния, оно имеет те же основные недостатки, такие как проблемы в многомерном пространстве и зависимость от единиц измерения признаков. Кроме того, гибкость p-значения также может быть недостатком, поскольку поиск правильного p-значения может быть неэффективным с вычислительной точки зрения.

Косинусное сходство и расстояние

Косинусное подобие — это мера ориентации, определяемая косинусом между двумя векторами без учета величины векторов. Косинусное подобие часто используется в более высокой размерности, где величина данных не имеет большого значения, например, для систем рекомендаций или анализа текста, в которых данные представлены количеством слов.

Подобие косинуса может лежать между -1 (противоположная ориентация) и 1 (та же ориентация) и рассчитывается по формуле:

Однако косинусное сходство часто используется в положительном пространстве, в котором диапазон лежит между 0 и 1. Косинусное расстояние, которое вычитает косинусное сходство из 1, лежит между 0 (сходные значения) и 1 (различные значения). Косинусное расстояние можно определить в Python следующим образом:

from scipy.spatial import distance
distance.cosine(vector_1, vector_2)

Главный недостаток косинусного расстояния заключается в том, что оно учитывает не величину, а только направление векторов. Следовательно, различия в значениях не учитываются в полной мере.

Гаверсинус расстояние

Расстояние Хаверсина измеряет кратчайшее расстояние между двумя точками на сфере. Следовательно, расстояние используется для навигации там, где точки имеют долготу и широту и где кривизна оказывает влияние.

Расстояние Хаверсина можно определить по формуле:

где r — радиус сферы, а φ и λ — долгота и широта. Расстояние Хаверсина можно определить в Python, используя:

from sklearn.metrics.pairwise import haversine_distances
haversine_distances([vector_1, vector_2])

Основным недостатком расстояния Хаверсина является предположение о сфере, что бывает редко.

Расстояние Хэмминга

Расстояние Хэмминга измеряет несходство между двумя бинарными векторами или строками.

Для этого векторы сравниваются поэлементно и количество различий усредняется. Результирующее расстояние находится между 0, если оба вектора идентичны, и 1, если оба вектора полностью различны.

Мы можем определить расстояние Хэмминга в Python:

from scipy.spatial import distance
distance.hamming(vector_1, vector_2)

Расстояние Хэмминга имеет два основных недостатка. Во-первых, мера расстояния может сравнивать только вектора одинаковой длины, а во-вторых, она не дает величины разницы. Следовательно, расстояние Хэмминга не рекомендуется, когда имеет значение величина разницы.

Статистические меры расстояния

Статистические меры расстояния можно использовать для проверки гипотез, проверки согласия, задач классификации или обнаружения выбросов.

Индекс Жаккара и расстояние

Индекс Жаккара используется для определения сходства между двумя выборками. Он отражает, сколько существует прямых совпадений по сравнению с общим набором данных. Индекс Жаккара часто используется для двоичных данных, чтобы сравнить прогноз модели глубокого обучения для распознавания изображений с помеченными данными или для сравнения текстовых шаблонов в документах на основе перекрытия слов.

Расстояние Жаккара рассчитывается по формуле:

и может быть определено в Python с помощью:

from scipy.spatial import distance
distance.jaccard(vector_1, vector_2)

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

Индекс Серенсена-Дайса

Индекс Серенсена-Дайса похож на индекс Жаккара, поскольку он измеряет сходство и разнообразие наборов выборок. Однако индекс более интуитивно понятен, поскольку он вычисляет процент перекрытия. Индекс Серенсена-Дайса часто используется для сегментации изображений и анализа сходства текста.

Расстояние Серенсена-Дайса определяется:

Мы можем реализовать индекс в Python через:

from scipy.spatial import distance
distance.dice(vector_1, vector_2)

Основным недостатком индекса Серенсена-Дайса является то, что на него сильно влияет размер набора данных.

Динамическое искажение времени

Динамическая деформация времени — важный метод измерения расстояния между двумя временными рядами разной длины. При этом Dynamic Time Warping можно использовать для всех случаев использования данных временных рядов, таких как распознавание речи или обнаружение аномалий.

Но зачем нам нужна еще одна мера расстояния только для временных рядов? Если временные ряды не имеют одинаковой длины или искажены, описанные выше меры расстояния не могут определить хорошее сходство. Например, евклидово расстояние вычисляет расстояние между обоими временными рядами для каждого временного шага. Но если оба временных ряда имеют одинаковую форму, но сдвинуты во времени, евклидово расстояние покажет большое различие, хотя временные ряды очень похожи.

Динамическая деформация времени позволяет избежать этой проблемы, сводя к минимуму общее расстояние между двумя временными рядами, используя сопоставление «многие к одному» или «один ко многим». Это приводит к более интуитивной мере сходства при поиске наилучшего выравнивания. Расстояние минимизируется за счет пути деформации, который находится с помощью динамического программирования и который должен удовлетворять следующим условиям:

  • граничное условие:путь деформации начинается и заканчивается в начальной и конечной точках обоих временных рядов.
  • условие монотонности: сохраняется временной порядок точек, что позволяет избежать возврата во времени
  • условие непрерывности: переходы пути ограничены соседними моментами времени, что позволяет избежать скачков во времени.
  • условие окна деформации (необязательно): допустимые точки попадают в окно деформации заданной ширины
  • условие наклона (необязательно):наклон пути деформации ограничен, что позволяет избежать экстремальных перемещений

Чтобы определить расстояние между двумя временными рядами, мы можем использовать пакет fastdtw в Python:

from scipy.spatial.distance import euclidean
from fastdtw import fastdtw
distance, path = fastdtw(timeseries_1, timeseries_2, dist=euclidean)

Основным недостатком динамической деформации времени является сравнительно более высокая вычислительная мощность по сравнению с другими мерами расстояния.

Заключение

В этой статье я дал вам краткое введение в десять часто используемых мер расстояния. Я показал вам, как они работают, как вы можете реализовать их в Python и для каких задач они часто используются.

Если вы считаете, что я пропустил важную меру расстояния, сообщите мне об этом.