Назад к вопросам
Middle
128
questionbank

Что такое алгоритм k-ближайших соседей (kNN)?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Алгоритм K-ближайших соседей (kNN) — это простой, непараметрический алгоритм машинного обучения, используемый как для классификации, так и для регрессии.

Суть: Относит новый объект (точку данных) к классу, наиболее представленному среди k ближайших к нему объектов в обучающей выборке. Для регрессии predicts значение как среднее/медианное значение k ближайших соседей.

Основные шаги для классификации:

  1. Выбор K: Определить число ближайших соседей (K).
  2. Расчет расстояния: Вычислить расстояние между новым объектом и каждым объектом в обучающей выборке (например, евклидово расстояние).
  3. Поиск K ближайших: Отсортировать объекты по расстоянию и выбрать K ближайших.
  4. Голосование: Определить класс нового объекта на основе мажоритарного голосования среди K ближайших соседей.

Преимущества:

  • Простота реализации и понимания.
  • Не требует обучения модели (ленивый алгоритм).
  • Адаптируется к новым данным по мере их появления.

Недостатки:

  • Вычислительно затратен при больших объемах данных (на этапе предсказания).
  • Выбор K и метрики расстояния критически важны.
  • Чувствителен к масштабу признаков и "проклятию размерности".
  • Не работает хорошо с категориальными признаками напрямую (требуется кодирование).

Применение:

  • Распознавание образов.
  • Рекомендательные системы.
  • Медицинская диагностика.
  • Поиск похожих документов.
# Пример реализации kNN для классификации с использованием scikit-learn

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np

# Создание демонстрационных данных
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
y = np.array([0, 0, 1, 1, 0, 1]) # Метки классов

# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Создание и обучение модели kNN
# K=3, то есть 3 ближайших соседа
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Предсказание на тестовой выборке
y_pred = knn.predict(X_test)

# Оценка точности
accuracy = accuracy_score(y_test, y_pred)
# print(f"Точность модели: {accuracy}")

# Предсказание для нового объекта
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Предсказанный класс для новой точки: {predicted_class[0]}")