Введение
Алгоритм K-ближайших соседей (KNN) — это простой, но мощный алгоритм обучения с учителем, используемый для задач классификации и регрессии. Он работает по принципу поиска K ближайших обучающих примеров в пространстве признаков к заданному тестовому примеру и предсказания метки на основе большинства голосов или усреднения меток ближайших соседей. В этой статье мы узнаем, как реализовать алгоритм K ближайших соседей в Python.
Об алгоритме K-ближайших соседей:
Алгоритм K-ближайших соседей — это непараметрический алгоритм, который не делает никаких предположений о базовом распределении данных. Это алгоритм ленивого обучения, то есть он не строит явную модель во время обучения, а вместо этого сохраняет набор обучающих данных для последующего использования на этапе прогнозирования. Алгоритм вычисляет расстояния между тестовым примером и всеми обучающими примерами, используя метрику расстояния (например, евклидово расстояние), и выбирает K ближайших соседей на основе этих расстояний. Окончательный прогноз делается на основе класса большинства или среднего значения меток K соседей.
О наборе данных:
В этой реализации мы будем использовать набор данных Iris, популярный набор данных в машинном обучении. Набор данных Iris состоит из измерений длины чашелистиков, ширины чашелистиков, длины лепестков и ширины лепестков трех разных видов цветков ириса. Он обычно используется для демонстрации различных алгоритмов машинного обучения.
Требования:
Для реализации алгоритма K-ближайших соседей в Python нам понадобятся следующие библиотеки:
- pandas: для обработки и анализа данных.
- scikit-learn (sklearn): для алгоритмов машинного обучения и показателей оценки.
- matplotlib: для визуализации данных.
- Seaborn: для создания матрицы путаницы.
Выполнение:
Сначала мы импортируем необходимые библиотеки и загружаем набор данных Iris:
import pandas as pd from sklearn.datasets import load_iris iris = load_iris() # Create a DataFrame from the dataset df = pd.DataFrame(iris.data, columns=iris.feature_names) df['target'] = iris.target df['flower_name'] = df.target.apply(lambda x: iris.target_names[x]) Next, we split the dataset into training and testing sets: from sklearn.model_selection import train_test_split X = df.drop(['target', 'flower_name'], axis='columns') y = df.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
Затем мы создаем классификатор K-ближайших соседей и подгоняем его к обучающим данным:
from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors=10) knn.fit(X_train, y_train) We can evaluate the model's accuracy on the test data: accuracy = knn.score(X_test, y_test) print("Accuracy:", accuracy)
Мы также можем делать прогнозы для новых точек данных, используя обученную модель:
new_data = [[4.8, 3.0, 1.5, 0.3]] predicted_class = knn.predict(new_data) print("Predicted class:", predicted_class)
Чтобы визуализировать производительность модели, мы можем построить матрицу путаницы:
import matplotlib.pyplot as plt from sklearn.metrics import confusion_matrix import seaborn as sns y_pred = knn.predict(X_test) cm = confusion_matrix(y_test, y_pred) plt.figure(figsize=(7, 5)) sns.heatmap(cm, annot=True) plt.xlabel('Predicted') plt.ylabel('Truth')
Наконец, мы можем распечатать отчет о классификации, который обеспечивает точность, полноту и оценку F1 для каждого класса:
from sklearn.metrics import classification_report print(classification_report(y_test, y_pred))
Заключение:
В этой статье мы узнали, как реализовать алгоритм K ближайших соседей в Python с использованием набора данных Iris. Мы рассмотрели шаги от загрузки данных до оценки модели, включая обучение классификатора, создание прогнозов, визуализацию результатов с использованием матрицы путаницы и печать отчета о классификации. Алгоритм K-ближайших соседей — это универсальный и интуитивно понятный алгоритм, который можно применять к различным задачам классификации. Стоит изучить различные значения K и поэкспериментировать с разными наборами данных, чтобы понять его поведение и производительность.