Евклидово, Манхэттенское расстояние и расстояние Минковского, Разрыв связей в KNN, Параметрические и непараметрические модели, Преимущества и недостатки

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

Нажмите здесь, чтобы перейти к предыдущей статье/лекции на тему «A35: K-ближайшие соседи (KNN) — за кулисами!»

💐Нажмите здесь, чтобы ПОДПИСАТЬСЯ на меня, чтобы получать новые материалы💐

⚠️ Мы будем заниматься практическим кодированием, чтобы понять «внутри и снаружи» модели KNN, поговорим о связях, преимуществах и недостатках… .. и многом другом! 🧘🏻‍♂️Делать — значит учиться.🧘🏻‍♂️

✅ Предложение: Откройте новый блокнот Jupyter и введите код, читая эту статью, это обучение, и да, «ПОЖАЛУЙСТА, прочитайте комментарий, он очень полезен…..!»

🧘🏻‍♂️ 👉🎯

С возвращением, ребята, давайте узнаем немного больше и изучим KNN на практике!

До сих пор мы узнали, как алгоритмы регрессии (линейные и логистические) можно использовать в контролируемом машинном обучении.

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

1. Обзор KNN и функция расстояния

  • 1.1: Евклидово расстояние
  • 1.2: Манхэттенское расстояние
  • 1.3: Расстояние Минковского

2. Визуализируйте работу KNN — на практике

  • 2.1: Визуализируйте обучение и тестовые данные
  • 2.2: Вычисление расстояний от контрольной точки
  • 2.3: Нанесение расстояний и выбранного значения k

3. Преимущества и недостатки

4. Чтения

5. Примечание о параметрических и непараметрических моделях — полезно знать

6. Разрыв связей

1. Обзор KNN и функции расстояния

Как показано на слайдах, KNN считает, сколько наблюдений принадлежит определенному классу с выбранным значением k (количество соседей), и принимает решение на основе большего количества голосов за класс тестовых данных. Алгоритм сохраняет все доступные точки данных и вычисляет их расстояния от тестовых данных для своей задачи классификации. Также важно помнить, что в этом случае очень важны физические единицы функций, и все они должны быть в одинаковом масштабе. Масштабирование признаков (стандартизация или нормализация) может значительно улучшить производительность модели.

🧘🏻‍♂️Дистанционные функции для KNN🧘🏻‍♂️

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

Несколько общих функций расстояния для KNN:

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

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

На рисунке ниже (слева) показана теорема Пифагора, а (справа) вычислено евклидово расстояние между двумя точками в двумерном евклидовом пространстве.

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

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

Слева, в сетке единичный квадрат/с, черные линии показывают манхэттенские расстояния. Любое количество линий вдоль сетки даст равное расстояние (10 units) между 𝑎 и 𝑏. Евклидово расстояние (5×√2 ∼7,07 𝑢𝑛𝑖𝑡𝑠)

показан зеленой линией между точками. Показаны реальные карты между двумя разными точками с Таймс-сквер, Манхэттен, Нью-Йорк, все расстояния равны на отдельной карте.

В плоскости с «𝑎» в точках (𝑎1,𝑎2) и «𝑏» в точках (𝑏1,𝑏2) манхэттенское расстояние между «𝑎» и «𝑏» будет равно |𝑎1−𝑏1|+|𝑎2−𝑏2 |

1.3: Расстояние Минковского

Расстояние Минковского можно рассматривать как обобщение между евклидовым расстоянием и манхэттенскими расстояниями, а также между двумя точками (𝑎,𝑏), оно определяется как:

𝑝 обычно имеет значение от 1 до 2, однако это может быть любое реальное значение. (Обратите внимание, что для значений 𝑝‹1 приведенная выше формула не определяет допустимую метрику расстояния, поскольку неравенство треугольника не выполняется.)

Давайте двигаться и практически делать вещи.

Как всегда, нам нужно импортировать несколько базовых библиотек…!

import pandas as pd;
import numpy as np
import matplotlib.pyplot as plt;
import seaborn as sns
sns.set_style(‘whitegrid’) # just optional!
%matplotlib inline
sns.set(font_scale=1.5) # setting font size for the whole notebook
sns.set_style(“whitegrid”) # setting the style
#Retina display to see better quality images.
%config InlineBackend.figure_format = ‘retina’
# Lines below are just to ignore warnings
import warnings; 
warnings.filterwarnings(‘ignore’)

*******************************************************************

2. Визуализируйте работу KNN — на практике

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

🧘🏻‍♂️Набор данных🧘🏻‍♂️

Мы можем использовать make_biclusters() из scikit-learn для создания простого набора данных с 2 функциями (столбцами) и 50 наблюдениями (точками данных). Мы также можем добавить гауссов шум при создании кластеров и назначить им класс.

Давай сделаем это!

2.1: Визуализируйте обучение и тестовые данные

Итак, у нас есть данные с двумя функциями и целевым столбцом. Давайте создадим точечную диаграмму и визуализируем распределение точек данных. Мы можем использовать параметр hue, чтобы классы отображались разными цветами. На другом графике (справа) мы можем добавить контрольную точку, для которой класс неизвестен, и мы хотим, чтобы KNN предсказал ее класс.

Код ниже должен быть понятен на данном этапе, это наша 36-я лекция в серии!

fig,(ax1,ax2)=plt.subplots(nrows=1,ncols=2,figsize=(18,8))
#Plotting data
sns.scatterplot(x=’feature_1', y=’feature_2', data=df, hue=’target’, ax=ax1, s=150)
ax1.set_title(“The data — two classes”)
# Plot our new point -- Star in the figure in right
test_point=[[10,50]]
sns.scatterplot(x=’feature_1', y=’feature_2', data=df, hue=’target’, ax=ax2,s=150)
ax2.scatter(x=test_point[0][0], y=test_point[0][1], color=”red”, marker=”*”, s=1000)
ax2.set_title(‘Red star is a test (unkown) point’)
plt.tight_layout();

Красная звезда — это новая неизвестная точка данных, которую мы хотим, чтобы наш алгоритм KNN предсказал, и для этого нам необходимо выполнить следующие шаги:

👉 Шаг 1. Вычислите расстояния (используя выбранную метрику) между тестом и всеми точками данных.
👉 Шаг 2. Выберите 𝑘 — количество ближайших соседей из тестовых данных, которые нужно заявить. право собственности на тестовую точку путем голосования
👉 Шаг 3: побеждает большинство, поэтому класс с большим количеством голосов будет назначен тестовым данным

Возможно, вы подумали о правильном вопросеЧто произойдет, если два класса наберут одинаковое количество голосов? Разрешаем разногласия! Не беспокойтесь, мы обсудим это через некоторое время!

2.2: Вычисление расстояний от контрольной точки

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

2.3: Нанесение расстояний и выбранного значения k

Итак, мы вычислили расстояния и добавили их в наш исходный фрейм данных. Хорошо визуализировать их и посмотреть, как значение k влияет на класс тестовых данных.

  • Давайте напишем простую функцию для получения графиков. Функция принимает только значение k и подходит для классификации бинарных классов. Однако его можно легко настроить для задачи классификации нескольких классов (попробуйте сами, создав три или четыре кластера — хорошее упражнение!)

Пожалуйста, прочитайте комментарии, мы также занимаемся возможными связями в реализации.

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

# Function call with selected k value
plot_knn_distances(k=20)
# To Do: Try different number for k and see what class you are getting!
# Try modifying the function to store the output class for test point with different k

Теперь у нас есть полное представление об алгоритме knn и его принципе работы. Это один из самых простых алгоритмов классификации.

Давайте посмотрим, как scikit-learn реализует этот алгоритм для нас!

В следующей лекции мы рассмотрим и реализуем проект KNN с использованием scikit-learn. Тут только сравнивать!

На самом деле мы знаем, что у 20 соседей есть связи, верно? Похоже, что scikit-learn занимается внутренними связями. Всегда рекомендуется читать документацию по используемой версии, чтобы увидеть, как обстоят дела со связями.

==>Практическое правило — всегда выбирать нечетное значение для k, это устранит основную причину равенства.

*******************************************************************

3. Преимущества и недостатки

🧘🏻‍♂️КНН — Преимущества🧘🏻‍♂️

  • Просто понять и объяснить
  • Обучение моделей проходит быстро
  • KNN — ленивый ученик, алгоритм не учится на данных обучения, он фактически запоминает набор данных обучения.
  • Может использоваться для классификации и регрессии
  • Нелинейный алгоритм.
  • Решение границы КНС представляют собой локально линейные отрезки, но в целом имеют сложную форму, не эквивалентную прямой в 2D или гиперплоскости в более высоких измерениях.

🧘🏻‍♂️КНН — Недостатки🧘🏻‍♂️

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

Мы также знаем, что k очень важно, мы найдем лучшее значение k для выбранного набора данных в следующей лекции. Пока этого достаточно!

*******************************************************************

4. Чтения

*******************************************************************

5. Примечание о параметрических и непараметрических моделях — полезно знать

До сих пор все наши тесты и методы были параметрическими. То есть мы предположили определенное распределение наших данных. В линейной регрессии нашими параметрами являются коэффициенты в нашей модели, и наша оценка цели рассчитывается на основе этих параметров.

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

=› Когда мы не делаем предположений о распределении наших данных, мы называем наши данные непараметрическими. Почти для каждого параметрического теста доступен непараметрический аналог.

Модель KNN является примером непараметрической модели. Вы можете видеть, что коэффициенты для разных предикторов отсутствуют, и наша оценка не представлена ​​формулой наших переменных-предикторов.

*******************************************************************

6. Разрыв связей

Мы уже поднимали этот вопрос и реализовали способ решения ситуации, давайте пересмотрим!

👉 Что делать, если у нас будет равное количество голосов за класс, чтобы предсказать балл?

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

👉 KNN кажется довольно простым. Это?

  • Если мы рассматриваем единое значение расстояния (без взвешенных предположений), вычисление расстояний до известных и неизвестных точек становится очень неэффективным при больших наборах данных. Даже при взвешенных расстояниях KNN все еще не очень эффективен. Не беда, если с нашими данными все работает!

*******************************************************************

💐Нажмите здесь, чтобы ПОДПИСАТЬСЯ на меня, чтобы получать новые материалы💐

🌹Продолжайте практиковаться, чтобы освежить навыки и добавить новые навыки🌹

✅🌹💐💐💐🌹✅ Похлопайте и поделитесь ››вы можете помочь нам связаться с тем, кто изо всех сил пытается изучить эти понятия.✅🌹💐💐💐🌹✅

Удачи!

Увидимся на следующей лекции на тему A37: Важность масштабирования функций в KNN — практическая реализация»

Примечание. Полный курс, включая видеолекции и блокноты Jupyter, доступен по следующим ссылкам:

**************************************************************************************************************************************

О докторе Джунаиде Кази:

Доктор. Джунаид Кази — специалист в предметной области, консультант по науке о данных и машинному обучению, а также создатель команды. Он является тренером по профессиональному развитию, наставником, автором, техническим писателем и приглашенным спикером. Доктор. Qazi можно связаться для консалтинговых проектов, технического письма и / или тренингов по повышению квалификации через LinkedIn.

**************************************************************************************************************************************