Типы мер расстояния в машинном обучении

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

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

Типы расстояний доступны в библиотеке scipy.spatial.distance.

   braycurtis       -- the Bray-Curtis distance.
   canberra         -- the Canberra distance.
   chebyshev        -- the Chebyshev distance.
   cityblock        -- the Manhattan distance.
   correlation      -- the Correlation distance.
   cosine           -- the Cosine distance.
   euclidean        -- the Euclidean distance.
   jensenshannon    -- the Jensen-Shannon distance.
   mahalanobis      -- the Mahalanobis distance.
   minkowski        -- the Minkowski distance.
   seuclidean       -- the normalized Euclidean distance.
   sqeuclidean      -- the squared Euclidean distance.
   wminkowski       -- (deprecated) alias of `minkowski`.

Из этих семи наиболее часто используются в машинном обучении. Начнем с импорта самого важного пакета.

from scipy.spatial import distance

1. Евклидово расстояние или норма L2

Это простейшая форма расстояния, которую также называют координатным расстоянием. Уравнение:

coord1 = (1,2,3)
coord2 = (4,5,3)
eu_distance = distance.euclidean(coord1,coord2)
eu_distance

Вывод

4.242640687119285

2. Манхэттенское расстояние или норма L1

Манхэттенское расстояние дает абсолютную разницу между точками.

coord1 = (1,2,3)
coord2 = (4,5,3)
man_distance = distance.cityblock(coord1,coord2)
man_distance

Вывод

6

3. Расстояние Минковского

Это общая форма расстояния, а p представляет порядок нормы, которой мы хотим следовать. L1 и L2 получены от Minkowsi.

coord1 = (1,2,3)
coord2 = (4,5,3)
min_distance = distance.minkowski(coord1,coord2, p=4)
min_distance

Вывод

0.5

Вышеуказанные три матрицы способны находить расстояние между точками, но как найти расстояние в строках, массивах или наборах?

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

Хемминг используется, чтобы найти изменение позиции бита.

  • Разные струны имеют большее расстояние Хэмминга
  • Это работает только для строк одинаковой длины
  • Идентичные строки будут иметь нулевое расстояние Хэмминга
str1 = "starwars"
str2 = "startrek"
ham_distance = distance.hamming(list(str1), list(str2))
ham_distance

Вывод

0.5

5. Косинусное подобие

Это мера сходства между двумя ненулевыми векторами пространства внутреннего произведения, которая измеряет косинус угла между ними. Это свойство используется в НЛП и анализе текста для поиска связи в векторах слов.

vector1 = [1,2,3]
vector2 = [0,3,3]
distance.cosine(vector1,vector2)

Вывод

0.05508881747693195

6. Расстояние Жаккара

Это определяется как отношение пересечения множества к объединению множества.

Расстояние Жаккара = Сходство 1-Жаккара

array1 = [1,0,0]
array2 = [1,1,0]
j_distance = distance.jaccard(array1, array2)
j_similarity = 1 - j_distance
print(f"Jaccard similarity score : {j_similarity}") 
print(f"Jaccard distance : {j_distance}")

Вывод

Jaccard similarity score : 0.5
Jaccard distance : 0.5

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

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

from scipy.spatial import distance
# the inverse of the covarince matrix
iv = [[1, 0.5, 0.5], [0.5, 1, 0.5], [0.5, 0.5, 1]]
distance.mahalanobis([2, 0, 0], [0, 1, 0], iv)

Вывод

1.7320508075688772

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