Найти тему
Data Science и всё такое

Метод K-ближайших соседей

Оглавление

@just_data_science November 22, 2017

Заголовок - не шутка. Есть такой алгоритм классификации, и он так и называется - K-nearest neighbor. Здесь буква К - это число, подразумевающее, что метод для работы берет фиксированное количество соседей.

Соседи по общаге или офису?

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

Работает это так. Берем объект, который хотим классифицировать. Начинаем замерять расстояние от него до ближайших к нему объектов. Не до всех, а только до K штук. Смотрим, к каким классам относятся эти К объектов. Какого класса больше всего - к этому и относим наш классифицируемый объект.

А можно на примере?

Трехмерное пространство холдильника с объектами - напитками
Трехмерное пространство холдильника с объектами - напитками

Допустим, вы открываете холодильник друга и видите незнакомую вам бутылку - Hennessy. Вы знаете, что Corona Extra - это пиво, а остальные бутылки - крепкий алкоголь. Что это за напиток Hennessy, крепкий ли он?

Подсчитаем по методу K-ближайших соседей.

При К=2 ближайшими соседями Hennessy будут ром и кокосовый ликер. Оба - крепкие напитки. Значит и Хеннесси - крепкий.

При К=5 ближайшими будет 1 буткла пива и 4 крепких. Вновь нет сомнений, что Хеннессси - крепкий.

А вот при К=51 начинается внезапное. В холодильнике 45 бутылок пива и 6 других напитков, плюс "неизвестный" Хеннесси. И получается, что при таком К напиток станет считаться пивом.

Выходит, метод неправильный?

Нет, метод такой же, как и любые другие методы машинного обучения. То есть - правильный, но нужно подбритать подходящие для задачи параметры. Для данного метода - нужно подбирать к задаче такое число К, которое чаще всего дает наиболее правильные результаты.

Кроме того, метод можно "тюнинговать". Например придавать каждому из соседей вес, не физический, а всмысле "значимость", "важность". В нашем примере это может быть "объем бутылки": будем давать 5 очков за соседей такого же или большего объема, что и искомая бутылка, и 0.5 очков за соседей меньшего объема. При таком подходе при К=51 мы получим 45*0.5=22.5 очков за соседей в маленьких бутылках (Корона), и 6*5=30 очков за соседей в больших бутылках. А значит - классифицируем Хеннесси правильно, как крепкий напиток.

Нужны ли Ближайшие соседи?

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

Минусы - проводит очень много вычислений, проще говоря - "жрёт" ресурсы компьютера и тормозит. Тем больше, чем больше K и больше сравниваемых объектов. И при этом в реальных сложных задачах метод выдает не самый эффективный результат.

Поэтому, данный метод всегда изучается, но в настоящих задачах мало используется.