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

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

Допустим, мы хотим создать кластеры, используя Кластеризацию K-средних или Алгоритм k-ближайшего соседа для решения задачи классификации или регрессии. Как вы здесь определите сходство между разными наблюдениями? Как можно сказать, что две точки похожи друг на друга?

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

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

Именно на это мы и стремимся ответить в этой статье. Мы рассмотрим 4 типа дистанционных метрик в машинном обучении и поймем, как они работают в Python.

4 типа показателей расстояния в машинном обучении

  1. Евклидово расстояние
  2. Манхэттен Расстояние
  3. Минковский Расстояние
  4. Расстояние Хэмминга

Начнем с наиболее часто используемой метрики расстояния - евклидова расстояния.

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

Евклидово расстояние представляет собой кратчайшее расстояние между двумя точками.

Большинство алгоритмов машинного обучения, включая K-Means, используют этот показатель расстояния для измерения сходства между наблюдениями. Допустим, у нас есть две точки, как показано ниже:

Итак, евклидово расстояние между этими двумя точками A и B будет:

Вот формула евклидова расстояния:

Мы используем эту формулу, когда имеем дело с двумя измерениями. Мы можем обобщить это для n-мерного пространства как:

Где,

  • n = количество измерений
  • pi, qi = точки данных

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

Сначала мы импортируем необходимые библиотеки. Я буду использовать библиотеку SciPy, которая содержит заранее написанные коды для большинства функций расстояния, используемых в Python:

# importing the library
from scipy.spatial import distance
# defining the points
point_1 = (1, 2, 3)
point_2 = (4, 5, 6)
point_1, point_2

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

# computing the euclidean distance
euclidean_distance = distance.euclidean(point_1, point_2)
print('Euclidean Distance b/w', point_1, 'and', point_2, 'is: ', euclidean_distance)

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

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

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

Мы можем представить Манхэттенское расстояние как:

Поскольку приведенное выше представление является двухмерным, для вычисления Манхэттенского расстояния мы возьмем сумму абсолютных расстояний как по осям x, так и по y. Итак, расстояние Манхэттена в двумерном пространстве определяется как:

А обобщенная формула для n-мерного пространства имеет вид:

Где,

  • n = количество измерений
  • pi, qi = точки данных

Теперь мы рассчитаем Манхэттенское расстояние между двумя точками:

# computing the manhattan distance
manhattan_distance = distance.cityblock(point_1, point_2)
print('Manhattan Distance b/w', point_1, 'and', point_2, 'is: ', manhattan_distance)

Обратите внимание, что Расстояние до Манхэттена также известно как расстояние до городского квартала. В SciPy есть функция под названием cityblock, которая возвращает расстояние Манхэттена между двумя точками.

Давайте теперь посмотрим на следующую метрику расстояния - расстояние Минковского.

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

Расстояние Минковского - это обобщенная форма евклидова и манхэттенского расстояния.

Формула для расстояния Минковского имеет следующий вид:

Здесь p представляет собой порядок нормы. Давайте вычислим расстояние Минковского порядка 3:

# computing the minkowski distance
minkowski_distance = distance.minkowski(point_1, point_2, p=3)
print('Minkowski Distance b/w', point_1, 'and', point_2, 'is: ', minkowski_distance)

Параметр p метрики расстояния Минковского в SciPy представляет порядок нормы. Когда порядок (p) равен 1, он будет представлять манхэттенское расстояние, а когда порядок в приведенной выше формуле равен 2, он будет представлять евклидово расстояние.

Давайте проверим, что в Python:

# minkowski and manhattan distance
minkowski_distance_order_1 = distance.minkowski(point_1, point_2, p=1)
print('Minkowski Distance of order 1:',minkowski_distance_order_1, '\nManhattan Distance: ',manhattan_distance)

Здесь вы можете видеть, что, когда порядок равен 1, расстояние Минковского и Манхэттенское расстояние одинаковы. Давайте также проверим евклидово расстояние:

# minkowski and euclidean distance
minkowski_distance_order_2 = distance.minkowski(point_1, point_2, p=2)
print('Minkowski Distance of order 2:',minkowski_distance_order_2, '\nEuclidean Distance: ',euclidean_distance)

Когда порядок равен 2, мы видим, что расстояния Минковского и Евклидовы одинаковы.

До сих пор мы рассмотрели метрики расстояния, которые используются, когда мы имеем дело с непрерывными или числовыми переменными. Но что, если у нас есть категориальные переменные? Как мы можем определить сходство между категориальными переменными? Здесь мы можем использовать другую метрику расстояния, называемую расстоянием Хэмминга.

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

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

Давайте разберемся в концепции на примере. Допустим, у нас есть две строки:

«евклидова» и «манхэттенского»

Поскольку длины этих строк равны, мы можем вычислить расстояние Хэмминга. Мы будем идти по символам и сопоставлять строки. Первый символ обеих строк (e и m соответственно) разный. Точно так же второй символ обеих строк (u и a) отличается. и так далее.

Посмотрите внимательно - семь символов разные, тогда как два символа (последние два символа) похожи:

Следовательно, расстояние Хэмминга здесь будет 7. Обратите внимание, что чем больше расстояние Хэмминга между двумя струнами, тем более непохожими будут эти струны (и наоборот).

Давайте посмотрим, как мы можем вычислить расстояние Хэмминга двух строк в Python. Сначала мы определим две строки, которые мы будем использовать:

# defining two strings
string_1 = 'euclidean'
string_2 = 'manhattan'

Это две строки «евклидова» и «манхэттен», которые мы также видели в примере. Давайте теперь вычислим расстояние Хэмминга между этими двумя струнами:

# computing the hamming distance
hamming_distance = distance.hamming(list(string_1), list(string_2))*len(string_1)
print('Hamming Distance b/w', string_1, 'and', string_2, 'is: ', hamming_distance)

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

Давайте посмотрим, что происходит, когда у нас есть строки разной длины:

# strings of different shapes
new_string_1 = 'data'
new_string_2 = 'science'
len(new_string_1), len(new_string_2)

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

# computing the hamming distance
hamming_distance = distance.hamming(list(new_string_1), list(new_string_2))

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

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

Первоначально опубликовано на https://www.analyticsvidhya.com 25 февраля 2020 г.