Типы мер расстояния в машинном обучении
Мы сталкиваемся с ситуациями, когда нам нужно выбрать метрику расстояния для алгоритмов. Базовое понимание мер расстояния обеспечит нашу эффективность в настройке этих алгоритмов.
Вы можете написать свои собственные функции, чтобы получить расстояния, которые я перечислил ниже. Я использовал функции 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
В зависимости от применения метрик расстояния в алгоритме убедитесь, что вы экспериментируете с доступными расстояниями.