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

Зачем используется K-ближайший сосед?

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

Как работает KNN?

k в K Ближайший сосед означает количество ближайших точек евклидова расстояния, которые нам нужны, которые называются соседями.

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

Пусть, положительное целое число K и тестовое наблюдение xo (прочитайте его как x-ноль), KNN сначала идентифицирует k точек, ближайших к xo, которые представлены No . Затем он оценивает условную вероятность для класса j как доли точек в No. {No здесь представляет все точки, а j представляет диапазон Y, вероятность которого должна быть рассчитана, когда X=xo уже произошло}

Простыми словами весь процесс таков:

  • KNN определяет число K соседей.
  • Он вычисляет ближайших соседей, вычисляя расстояние. Расстояние между двумя точками в пространстве рассчитывается с помощью любого из расстояний, таких как евклидово, минковского, манхэттенского (значение q = 1,2 в минкивоски дает манхэттенское и евклидово соответственно).

  • Теперь он выполняет проверку вероятности после подсчета количества соседей.

  • В нашем случае 2 синих и 1 оранжевый. П(В)=2/3 ›П(О)=1/3.
  • Следовательно, цель идентифицируется как синяя.

Реализация кода KNN

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

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

Третий шаг — это предсказание от этих соседей, полученное с помощью get_neighbors() в приведенном выше коде.

Это весь процесс получения KNN с нуля.

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

Где и когда KNN отстает?!

  • В KNN вообще нет процесса обучения или потому, что он напрямую выполняет вычисления на тестовых данных, находя евклидово расстояние для ближайших K точек.
  • KNN нельзя использовать на больших наборах данных из-за вышеуказанного пункта. Если данные очень большие, KNN займет много времени для вычисления ближайшего соседа каждой точки, что совсем не практично.
  • Когда кластеры перекрываются, KNN рушится, потому что KNN работает только в двух измерениях, то же самое и с Наивным Байесом. SVM решает эту проблему.