Нежное введение в алгоритм K-ближайших соседей

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

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

Алгоритм KNN простыми словами

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

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

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

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

KNN — это непараметрический алгоритм, что означает, что он не делает никаких предположений о распределении базовых данных обучающего набора данных. Поскольку наборы данных реального мира редко следуют какому-либо теоретическому распределению данных, непараметрические алгоритмы полезны при решении многих реальных задач.

Что важно помнить при построении и развертывании модели? Понимание своей конечной цели. Читайте наше интервью с экспертами по машинному обучению из Стэнфорда, Google и HuggingFace, чтобы узнать больше.

Как работает алгоритм KNN

Алгоритм K-ближайшего соседа можно выполнить всего за несколько простых шагов:

Шаг 1. Определите, связана ли проблема с категоризацией или регрессией.

Шаг 2. Определите наилучшее значение k (пожалуйста, обратитесь к этому руководству, чтобы узнать, как найти оптимальное значение k).

Шаг 3. Определите, какие k точек данных физически находятся ближе всего к точке данных без категорий в соответствии с выбранной вами метрикой расстояния (евклидовой, манхэттенской, Минковского и т. д.).

Шаг 4. В зависимости от типа задачи выберите один из следующих вариантов:

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

По евклидову расстоянию расстояние между двумя точками P1(x1,y1) и P2(x2,y2) можно выразить как:

Манхэттенское расстояние между двумя точками (X1, Y1) и (X2, Y2) равно |X1 — X2| + |Y1 — Y2|.

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

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

Реализация KNN в Python

Мы будем использовать пакет sklearn.neighbors, чтобы легко создать модель регрессора KNN в Python.

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

  1. Импорт необходимых библиотек.
    В этом руководстве мы сосредоточимся на наборе данных Penguins, входящем в пакет Seaborn. Набор данных включает подробную информацию о нескольких видах пингвинов, в том числе об острове, где был собран образец, а также о длине и глубине клювов каждого пингвина. Основная цель набора данных — определить вид пингвина по его физическим признакам. Набор данных содержит информацию о пингвинах Адели, Антарктических и Папуанских пингвинах, которые представляют собой три разных вида пингвинов.

2. Загрузка набора данных:

3. Разделение наших данных на обучение и тестирование: метод dropna применяется для удаления всех строк с нулевыми значениями.

Чтобы использовать евклидово расстояние, мы можем либо изменить параметр metric= на 'Euclidean', либо изменить параметр p на 2.

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

4. Предсказание:

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

5. Определение точности модели

Мы видим, что точность модели составляет 66%. Поскольку набор данных о пингвинах сильно несбалансирован, было бы целесообразно рассчитать некоторые другие оценочные показатели, такие как оценка F1 или кривая AUROC (которые учитывают дисбаланс классов). Однако для простоты здесь мы просто рассчитаем точность.

Полный код можно найти в моем репозитории GitHub.

Преимущества:

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

Минусы:

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

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

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

Не стесняйтесь связаться со мной на Medium, Linkedin и Twitter, чтобы получить больше контента!

Спасибо за прочтение!!! 🎉

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

Независимая редакционная служба Heartbeat спонсируется и публикуется Comet — платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое. это поможет вам быстрее создавать более качественные модели машинного обучения.