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

ЧТО ТАКОЕ АЛГОРИТМ KNN ДЛЯ ПРОСМОТРИТЕЛЯ?

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

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

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

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

КАК СЛЕДУЕТ СЧИТАТЬ РАССТОЯНИЯ МЕЖДУ ТОЧКАМИ?

Теперь возникает другой вопрос, как учитывать расстояния между пятнами. При использовании метода KNN часто используются определенные расстояния.

Евклидово расстояние: Если бы мы рассмотрели две точки X₂₁, Y₂₁ и X₂₂ Y ₂₂, расстояние между ними по Евклиду будет

. Это расстояние, также известное как Norm L₂, указывает расстояние между двумя кратчайшими точками.

Манхэттенское расстояние.Общая абсолютная разница между точками называется манхэттенским расстоянием.

Расстояние Минковского:-Для расстояния между двумя точками оно рассчитывается как

Если мы сделаем p = 1, оно станет манхэттенским расстоянием, а когда p = 2 — евклидовым расстоянием.

Как выбирается значение K?

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

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

Теперь, если мы рассмотрим другой набор данных, который имеет точки в следующем распределении, и рассмотрим K = 1, тогда граница решения будет примерно такой

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

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

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

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

Давайте разберемся на примере

Как обычно, давайте начнем с импорта библиотек, а затем чтения набора данных:

from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
dataset = datasets.load_breast_cancer()

Этот набор данных содержит данные о том, является ли рак злокачественным или нет.

X_train , X_test , Y_train , Y_test = train_test_split(dataset.data , dataset.target , test_size = 0.2,random_state=0)

Затем мы разделяем данные на наборы данных для обучения и тестирования.

clf = KNeighborsClassifier()
clf.fit(X_train, Y_train)

Затем мы выбираем классификатор как Kneigbor и подгоняем его, используя данные X_train и Y_train.

clf.score(X_test, Y_test)
0.9385964912280702

После оценки алгоритма мы получаем 0,93 балла. По умолчанию KNN выбирает значение K равным 5.