Алгоритм K-Nearest Neighbor

Концепция алгоритма k-ближайшего соседа возникла из нашей повседневной жизни и размышлений, которые мы делаем. Алгоритм напоминает цитату «Покажи мне, кто твои друзья, и я скажу тебе, кто ты?», вот в чем суть K-NN. Говоря простым языком, когда у нас есть новые данные для классификации. Мы находим k-ближайших соседей из обучающих данных.

Особенности алгоритма K-NN

  • K-NN — это непараметрический алгоритм, что означает, что он не делает никаких предсказаний относительно базовых данных.

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

Применение алгоритма K-NN

  • Самым крупным применением классификатора K-NN может быть система рекомендаций. Если вы знаете, что пользователю нравится определенный продукт, вы можете рекомендовать ему похожие продукты.

  • Кредитные рейтинги — Используя K-NN, мы можем вычислить кредитный рейтинг конкретного клиента.

  • Распознавание изображений и видео.

  • Распознавание рукописного текста (как OCR).

Работа алгоритма K-NN

Позвольте мне объяснить на примере. Чтобы мы могли легко понять его. Как вы видите, у нас есть две категории — красная и зеленая.


Если мы получим новую точку данных, как мы ее классифицируем? Давайте найдем это с помощью алгоритма K-NN.

  1. Первый шаг — выбрать значение K, по умолчанию оно равно 5.
  2. Возьмите K ближайших соседей новой точки данных в соответствии с алгоритмом расстояния, наиболее предпочтительным является евклидово расстояние, поскольку оно наиболее популярно. Если P1(x1,y1) — координаты новой точки данных, а P2(x2,y2) — координаты точек данных в Категории-1 и Категории-2, то евклидово расстояние будет равно
  3. Среди соседей подсчитайте количество точек данных в каждой категории.
  4. Вы можете видеть, что большинство соседей относятся к красной группе. Поэтому наша новая точка данных будет отнесена к той же категории.

Реализация алгоритма K-NN в python

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

import pandas as pd
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
column_names = ['sepal-length-cm', 'sepal-width-cm', 'petal-length-cm', 'petal-width-cm', 'Class']
data_set = pd.read_csv(url, names=column_names)
Вход в полноэкранный режим Выход из полноэкранного режима

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


Теперь у нас есть набор данных. Следующим шагом будет предварительная обработка данных, чтобы сделать их пригодными для создания модели, для этого нам нужно разделить набор данных на независимые и зависимые переменные. Здесь видно, что колонка ‘Class’ является независимой переменной, а все остальное — признаки. Давайте сделаем это.

features = dataset.iloc[:, :-1].values
test_label = dataset.iloc[:, 4].values
Войти в полноэкранный режим Выход из полноэкранного режима

Пожалуйста, поймите, что переменная features будет содержать все строки, кроме столбца «Class», а test_label содержит все строки столбца «Class».

Теперь нам нужно разделить набор данных на обучающий и тестовый. Мы должны быть осторожны на этом этапе, так как для достижения лучших результатов мы должны избегать как чрезмерной, так и недостаточной подгонки. Здесь мы возьмем соотношение 80:20. Это означает, что 80% набора данных будет использовано для обучения модели, а оставшиеся 20% — для тестирования созданной модели.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(features, test_label, test_size=0.20)
Вход в полноэкранный режим Выход из полноэкранного режима

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

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train) # 

X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
Вход в полноэкранный режим Выход из полноэкранного режима

Посмотрим на форму данных, хранящихся в X_train.

Теперь давайте обучим модель. Для создания модели мы будем использовать встроенный классификатор K-NN.

from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors=5)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
Вход в полноэкранный режим Выход из полноэкранного режима

Мы выбрали значение K равным 5. Это означает, что модель найдет 5 обучающих примеров, наиболее близких к новому примеру, а затем присвоит тестовому примеру наиболее распространенную метку класса (среди этих k обучающих примеров).

Давайте проверим матрицу путаницы и точность для определения эффективности нашей модели.

from sklearn.metrics import classification_report, confusion_matrix,accuracy_score
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
Вход в полноэкранный режим Выход из полноэкранного режима

Как вы можете видеть, мы получили отличные значения precision и recall. Это означает, что почти все положительные образцы определены правильно.
Мы также можем проверить общую точность модели.

acc = accuracy_score(y_test, y_pred)


Мы получили почти 94 % точности. Таким образом, наша модель хорошо справляется с заданными тестовыми данными.

Недостатки K-NN

  • Модель не работает, если набор данных очень большой.
  • Не работает при большом количестве измерений: Поэтому для решения проблемы необходимо уменьшить количество измерений, но это может сработать не в каждом случае.
  • Чувствителен к зашумленным данным: KNN очень чувствителен к шуму в наборе данных, что влияет на общий результат.
  • Он дорогой — потому что алгоритм хранит все обучающие данные. Поэтому он использует много памяти.
  • Высокие требования к памяти.

Заключение
Алгоритм k-nearest neighbors (KNN) — это простой алгоритм машинного обучения под наблюдением, который может решать задачи классификации и регрессии. Но когда набор данных становится больше, эффективность или скорость алгоритма снижается.

Ссылки:
Алгоритм K-NN, краткий экскурс от Криша Наика

Отказ от ответственности: Это личный [блог, пост, заявление, мнение]. Взгляды и мнения, выраженные здесь, принадлежат только автору и не представляют взгляды и мнения какой-либо организации или лица, с которым автор может быть связан профессионально или лично.

Оцените статью
devanswers.ru
Добавить комментарий