KNN или K-Nearest Neighbor — один из самых простых алгоритмов классификации, а также регрессии в машинном обучении.

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

Работа с KNN

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

Почему K так важен?

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

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

Теперь мы увидим некоторые графики с разными значениями K и то, как кривая решения меняется с изменением значения K.

Здесь мы взяли равномерно распределенные демонстрационные данные и попытались применить KNN с разными значениями K, чтобы найти результаты.

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

Одна вещь, которую мы можем заметить, что из-за одной синей точки при x = 5 вся область становится синей, но есть высокая вероятность того, что эта точка является выбросом.

Здесь мы можем видеть, что когда мы увеличиваем значение K и принимаем k = 5, наша плоскость принятия решений менее подвержена влиянию одной точки.

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

Теперь давайте еще больше увеличим значение K, чтобы увидеть результаты.

Для K=15 мы можем наблюдать небольшое недообучение. Мы можем легко увидеть нашу границу решения, состоящую из двух частей. В синей области мы можем видеть некоторую красную область, но кроме этого мы можем видеть прямую линию между обеими областями.

Теперь давайте еще больше увеличим значение K.

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

Это решение еще хуже, чем предыдущее, где мы взяли K=30, так как в этом случае у нас слишком много недообучения.

Теперь давайте еще больше увеличим значение k.

Здесь, когда мы берем k = 50, мы можем получить плоскость решения, которая полностью делит плоскость на две части. Мы можем видеть 2 полностью отдельных Плана.

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

При x=6 есть несколько синих точек, но они классифицируются как красные, и любая точка, лежащая там в будущем, также будет классифицироваться как красная, но есть большая вероятность, что эта точка будет синей.

Здесь можно легко наблюдать недообученность. И мы видим, что многие пункты неправильно классифицируются.

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

Кредиты AAIC (https://www.appliedaicourse.com/course/11/applied-machine-learning-online-course).