K-Nearest Neighbors в sklearn
Введение в K-Nearest Neighbors
K-Nearest Neighbors (KNN) — это один из самых простых и понятных алгоритмов машинного обучения, который используется для задач классификации и регрессии. Основная идея KNN заключается в том, что объект классифицируется на основе большинства голосов его ближайших соседей. Если мы говорим о классификации, то объекту присваивается класс, который наиболее часто встречается среди его K ближайших соседей. В случае регрессии, значение объекта определяется как среднее значение его K ближайших соседей. Этот алгоритм интуитивно понятен и часто используется в качестве базового метода для сравнения с более сложными моделями.
KNN обладает рядом преимуществ. Во-первых, он не требует обучения модели, так как все вычисления происходят в момент предсказания. Это делает его очень гибким и простым в реализации. Во-вторых, KNN может работать с любыми типами данных, что делает его универсальным инструментом. Однако у него есть и недостатки, такие как высокая вычислительная сложность при больших объемах данных и чувствительность к выбору метрики расстояния и параметра K.
Установка и импорт необходимых библиотек
Для начала работы с KNN в sklearn, необходимо установить и импортировать несколько библиотек. Основные библиотеки, которые нам понадобятся, это numpy
, pandas
, matplotlib
и, конечно же, scikit-learn
. Эти библиотеки обеспечат нас всеми необходимыми инструментами для работы с данными, их визуализации и построения модели.
# Установка библиотек (если они еще не установлены)
!pip install numpy pandas matplotlib scikit-learn
# Импорт необходимых библиотек
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
numpy
и pandas
помогут нам в работе с данными, matplotlib
— в их визуализации, а scikit-learn
предоставит все необходимые инструменты для построения и оценки модели KNN. Убедитесь, что все эти библиотеки установлены в вашей среде разработки.
Загрузка и подготовка данных
Для демонстрации работы KNN мы будем использовать датасет Iris, который входит в состав библиотеки scikit-learn
. Этот датасет содержит информацию о трех видах ирисов, и наша задача будет заключаться в классификации этих видов на основе длины и ширины чашелистиков и лепестков. Датасет Iris является классическим примером для демонстрации алгоритмов машинного обучения, так как он хорошо сбалансирован и легко интерпретируем.
from sklearn.datasets import load_iris
# Загрузка датасета Iris
iris = load_iris()
X = iris.data
y = iris.target
# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
Здесь мы загружаем данные и разделяем их на обучающую и тестовую выборки. Это важный шаг, так как он позволяет нам оценить производительность модели на данных, которые она не видела во время обучения. Мы используем функцию train_test_split
для разделения данных, задавая размер тестовой выборки как 30% от общего объема данных и фиксируя случайное состояние для воспроизводимости результатов.
Создание и обучение модели K-Nearest Neighbors
Теперь, когда данные подготовлены, мы можем создать и обучить модель KNN. Для этого мы будем использовать класс KNeighborsClassifier
из библиотеки scikit-learn
. Мы зададим параметр n_neighbors
равным 3, что означает, что для классификации каждого объекта будет использоваться 3 ближайших соседа.
# Создание модели KNN с K=3
knn = KNeighborsClassifier(n_neighbors=3)
# Обучение модели на обучающей выборке
knn.fit(X_train, y_train)
Процесс обучения модели KNN заключается в запоминании всех объектов обучающей выборки и их классов. В момент предсказания для нового объекта модель будет искать K ближайших соседей среди обучающих данных и определять класс на основе большинства голосов. В случае регрессии, предсказанное значение будет средним значением K ближайших соседей.
Оценка и визуализация результатов
После обучения модели, мы можем оценить её производительность на тестовой выборке и визуализировать результаты. Это поможет нам понять, насколько хорошо модель справляется с задачей классификации.
# Предсказание классов на тестовой выборке
y_pred = knn.predict(X_test)
# Оценка точности модели
accuracy = accuracy_score(y_test, y_pred)
print(f"Точность модели: {accuracy:.2f}")
# Матрица ошибок
conf_matrix = confusion_matrix(y_test, y_pred)
print("Матрица ошибок:")
print(conf_matrix)
# Отчет по классификации
class_report = classification_report(y_test, y_pred, target_names=iris.target_names)
print("Отчет по классификации:")
print(class_report)
# Визуализация матрицы ошибок
plt.figure(figsize=(8, 6))
plt.imshow(conf_matrix, interpolation='nearest', cmap=plt.cm.Blues)
plt.title('Матрица ошибок')
plt.colorbar()
tick_marks = np.arange(len(iris.target_names))
plt.xticks(tick_marks, iris.target_names, rotation=45)
plt.yticks(tick_marks, iris.target_names)
plt.ylabel('Истинный класс')
plt.xlabel('Предсказанный класс')
plt.show()
Мы используем несколько метрик для оценки производительности модели. Точность (accuracy
) показывает долю правильно классифицированных объектов. Матрица ошибок (confusion_matrix
) позволяет увидеть, какие классы чаще всего путаются моделью. Отчет по классификации (classification_report
) предоставляет более детальную информацию о точности, полноте и F1-мере для каждого класса.
Визуализация матрицы ошибок помогает наглядно увидеть, где модель совершает ошибки. Это может быть полезно для дальнейшего улучшения модели, например, путем изменения параметра K или выбора другой метрики расстояния.
Эти шаги помогут вам реализовать K-Nearest Neighbors в sklearn и оценить его производительность. KNN — это мощный инструмент для решения задач классификации и регрессии, и его простота делает его отличным выбором для новичков в машинном обучении. Надеюсь, эта статья поможет вам лучше понять, как работает KNN и как его использовать на практике.