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

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

Данные

Сначала нам нужен обучающий набор данных. Он может иметь любое количество измерений, но модель лучше всего работает с несколькими (2–5) числом признаков, потому что расстояния имеют тенденцию нормально распределяться в больших измерениях. (Это означает, что расстояния почти одинаковы, но различаются некоторым шумом.) Также количество точек данных может быть любого размера, но поскольку эта модель непараметрическая и сохраняет весь набор данных в памяти для прогнозирования (подробнее об этом позже), это может быть исчерпывающим в вычислительном отношении для больших наборов данных.

В этой истории я собираюсь использовать набор данных Iris, уменьшенный до 2 измерений (ширина * высота; для хорошей визуализации) со 150 точками данных, состоящими из 3 меток. (нарисовано выше)

Модель

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

Давайте будем более конкретными:

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

параметр: Метрики расстояния

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

  • Евклидово: Сумма[(xi-yi)^2]^1/2
  • Манхэттен: Сумма(|xi-yi|)
  • Минковский: Sum(|xi-yi|^c)^1/c → равно евклидову, если c=2, и Манхэттену, если c=1

где xi-yi — различия в каждом измерении точек данных x и y.

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

параметр: K соседей

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

На приведенном выше графике представлены четыре различных сценария K (увеличены для новой точки данных, кроме последнего). Если K = 1, мы проверяем только ближайшего соседа на его метку, поэтому в этом случае мы предсказываем «синюю» метку. Хотя это очень плохая практика, поскольку мы рискуем быть обманутыми случайным экстремальным выбросом. Давайте рассмотрим ситуацию, когда «зеленая» точка данных имеет значение выброса, которое находится на границе «синей» и «оранжевой» категорий, очень близко к нашей новой «красной» точке данных. Конечно, мы знаем, что «красная» точка должна быть либо «синей», либо «оранжевой», но модель все равно будет считаться «зеленой» на основе одного выброса.

Следуя этой логике, легко увидеть, что чем больше K, тем больше у нас уверенности в предсказании. Хотя это не совсем так. Проверяя последний (К = 100) сценарий, мы видим, что учитываются почти все «синие» и «оранжевые» точки, поэтому в данном случае решение заключается не в том, «какие метки ближе всего», а в том, «какая метка имеет больше вхождений во всем наборе данных».

Хорошее эмпирическое правило — указывать K как квадратный корень из размера набора данных (в нашем случае K = sqrt(150) ~ 12). Как мы видим в левом нижнем углу графика, он действительно выглядит достаточно хорошо, с соседями 7 «синих» и 5 «зеленых», поэтому мы предсказываем, что новая точка данных будет «синей». Но что, если бы это была ничья 6–6? Точно так же, как сценарий K = 2, где у нас была ничья 1–1. Ничья может случиться легко, если K — четное число. Чтобы избежать этого, также рекомендуется использовать нечетное число, или, если мы придерживаемся метода sqrt(n), мы можем захотеть всегда округлять в пользу нечетного целого числа.

Краткое содержание

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

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

Вы могли заметить, что мы не «подгоняем» нашу модель, как обычно делаем для других моделей машинного обучения. Это связано с тем, что эта непараметрическая модель не определяет такие веса и смещения для прогнозирования, а использует весь набор данных. Поэтому модель может сильно нагружать ЦП и ОЗУ при использовании для больших наборов данных.