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

Алгоритм K-ближайших соседей (KNN) - это тип контролируемого алгоритма машинного обучения, который может использоваться как для классификации, так и для задач прогнозирования регрессии. Однако он в основном используется для задач прогнозирования классификации в промышленности. Следующие два свойства хорошо определяют KNN:

Алгоритм ленивого обучения

Алгоритм непараметрического обучения

Объяснение на основе сценария

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

Однажды, сидя в этом углу, вы наблюдаете за новым учеником, которого не узнаете. Ну так что ты делаешь? Вы, как наблюдательный человек, тоже начинаете замечать его черты, его действия, его интересы, то, как он одет, и т. Д. Теперь в своем уме вы начинаете анализировать, какая группа (члены) имеет наиболее похожие атрибуты с атрибутами этого человека. и вы предполагаете, что этот человек принадлежит к этой группе.

Теперь предположим, что есть несколько вещей, которые вы еще не знаете об этом новом человеке, например, музыкальный жанр, которым он интересуется. Но вы видели, что группа (к которой, как вы предположили, принадлежит этот новый человек) часто слушает хип-хоп музыка в кафе. Теперь вы автоматически предположите, что новый человек также должен интересоваться тем же жанром. Понял?

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

Формальное объяснение

В K-Nearest Neighbours (предполагая проблему классификации) всякий раз, когда мы сталкиваемся с новой точкой данных, о которой мы ничего не знаем, мы находим расстояние между ее известными атрибутами и атрибутами ранее известных точек данных. Мы находим K ближайших точек данных и предполагаем, что наша новая точка данных принадлежит метке класса большинства из K ближайших точек.

Что означает «K» в алгоритме K-ближайшего соседа?

K в алгоритме K-Nearest Neighbor представляет количество ближайших соседних точек, которые голосуют за новый класс тестовых данных. Если k = 1, то тестовым примерам присваивается та же метка, что и ближайшему примеру в обучающем наборе. Если k = 3, проверяются метки трех ближайших классов, и наиболее распространенная (т. Е. Встречающаяся как минимум дважды) метка будет назначены, и так далее для больших ks

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

Что ж, с KNN есть некоторые проблемы. Во-первых, это алгоритм ленивого обучения. Давайте снова рассмотрим тот же пример. Предположим, что есть большое количество студентов. Когда вы начинаете классифицировать атрибуты нового ученика, вам нужно будет сравнить его / ее с каждым из учеников, чтобы найти самых близких, тем самым направив вас в ближайшую группу и помогая вам найти его черты в соответствии с чертами ученика. группа. Так что по мере того, как количество студентов увеличивается, процесс замедляется.

Пример Scikit-learn

# Import necessary modules
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
# Loading data
irisData = load_iris()
# Create feature and target arrays
X = irisData.data
y = irisData.target
# Split into training and test set
X_train, X_test, y_train, y_test = train_test_split(
 X, y, test_size = 0.2, random_state=42)
knn = KNeighborsClassifier(n_neighbors=7)
knn.fit(X_train, y_train)
# Predict on dataset which model has not seen before
print(knn.predict(X_test))

Вывод

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