Начнём с начала. Классифицировать объект — значит отнести его к одной из нескольких заранее известных групп. Скажем, определить, к какой из пяти пород принадлежит собака.



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



Чтобы алгоритм корректно работал, все признаки объекта должны выражаться осмысленными числовыми значениями. Как только вы придумаете, как «посчитать» уши, любую собаку можно будет представить в виде вектора (или точки) в трёхмерном пространстве, где каждая ось соответствует одному признаку.



Вот здесь мы и подходим к самому интересному!



● Расстояния между любыми двумя точками измеряемы.

● Очевидно, чем ближе друг к другу точки, тем больше похожи собаки.

● Собаки обычно наиболее похожи на других представителей своей породы.



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



Конечно, сам по себе алгоритм достаточно примитивен и в чистом виде почти не пригоден для реальных задач: есть проблемы и с точностью, и со скоростью. Зато на нём классно учиться :)