K-Nearest Neighbors (KNN)
Изучи метод K-ближайших соседей (KNN). Узнай, как этот алгоритм обучения с учителем работает для классификации и регрессии, применяется в визуальном поиске и интегрируется с Ultralytics YOLO26.
Метод K ближайших соседей (KNN) — это надёжный и интуитивно понятный алгоритм, используемый в области обучения с учителем для решения задач классификации и регрессии. Благодаря своей простоте KNN часто относят к категории «ленивых алгоритмов», поскольку он не строит модель и не обучает параметры на этапе обучения. Вместо этого он запоминает весь набор обучающих данных и выполняет вычисления только при поступлении запроса на предсказание. Основной принцип алгоритма основан на схожести признаков: предполагается, что точки данных с похожими атрибутами находятся в многомерном пространстве признаков близко друг к другу.
Как работает алгоритм#
Механизм метода K ближайших соседей основан на вычислении расстояний. Когда появляется новая точка запроса, алгоритм выполняет поиск в сохранённом наборе данных, чтобы найти «K» обучающих образцов, наиболее близких к новому входному значению.
-
Измерение расстояния: система вычисляет расстояние между точкой запроса и каждой другой точкой в базе данных. Наиболее распространённая метрика — евклидово расстояние, которое измеряет расстояние по прямой между точками. В зависимости от типа данных могут использоваться и другие метрики, например манхэттенское расстояние (расстояние по таксистской геометрии) или расстояние Минковского.
-
Выбор соседей: после вычисления расстояний алгоритм сортирует их и выбирает первые «K» ближайших записей.
-
Принятие решения: - Для классификации: алгоритм использует систему «голосования большинством». Точке запроса присваивается метка класса, которая встречается среди K соседей чаще всего. Этот подход широко используется в задачах базовой классификации изображений. - Для регрессии: предсказание вычисляется путём усреднения значений K ближайших соседей для оценки непрерывной переменной.
Выбор подходящего значения «K»#
Выбор оптимального значения «K» — важный этап настройки гиперпараметров. Значение K существенно влияет на производительность модели и её способность обобщать данные на новые примеры.
- Низкое значение K: небольшое значение K (например, K=1) делает модель очень чувствительной к шуму и выбросам в данных, что может привести к переобучению.
- Высокое значение K: большое значение K сглаживает границы решений, уменьшая влияние шума, но потенциально размывая отчётливые закономерности, что приводит к недообучению.
Практические применения#
Несмотря на простоту по сравнению с глубокими нейронными сетями, KNN сохраняет высокую актуальность в современном ИИ, особенно в сочетании с продвинутыми методами извлечения признаков.
- Рекомендательные системы: KNN поддерживает коллаборативную фильтрацию в потоковых медиасервисах и электронной коммерции. Определяя пользователей с похожей историей просмотров или покупательским поведением (соседей), платформы могут рекомендовать товары, которые, вероятно, понравятся пользователю, основываясь на предпочтениях его «ближайших соседей».
- Обнаружение аномалий: в сфере кибербезопасности и финансов KNN используется для обнаружения аномалий. Транзакции или сетевые активности отображаются в пространстве признаков; любая новая точка данных, находящаяся далеко от плотных кластеров «нормальной» активности, помечается как потенциальное мошенничество или нарушение безопасности.
- Визуальный поиск: современные системы векторного поиска часто используют алгоритмы приближённого поиска ближайших соседей (ANN) — оптимизированный вариант KNN, предназначенный для быстрого поиска похожих изображений на основе многомерных эмбеддингов, созданных такими моделями, как YOLO26.
Проблемы и важные аспекты#
Хотя KNN эффективен, он сталкивается с проклятием размерности. По мере увеличения числа признаков (размерности) точки данных становятся разреженными, а метрики расстояния теряют эффективность. Кроме того, поскольку KNN хранит все обучающие данные, он может требовать значительного объёма памяти и характеризоваться высокой задержкой вывода на больших наборах данных. Чтобы решить эту проблему, специалисты часто предварительно обрабатывают данные с помощью методов снижения размерности, таких как анализ главных компонент (PCA), или используют специализированные структуры данных, например KD-деревья, чтобы ускорить поиск. Для масштабирования наборов данных и обучения моделей на уровне предприятия использование Ultralytics Platform может помочь управлять вычислительными ресурсами, необходимыми для предварительной обработки сложных данных.
Различия между KNN и K-Means#
Важно отличать метод K ближайших соседей от кластеризации K-Means, поскольку схожесть их названий часто вызывает путаницу.
- KNN — это алгоритм обучения с учителем, который использует размеченные данные для построения предсказаний.
- K-Means — это алгоритм обучения без учителя, используемый для группировки неразмеченных данных в кластеры на основе структурного сходства.
Пример реализации#
Следующий фрагмент кода демонстрирует простой рабочий процесс классификации KNN с использованием популярной библиотеки Scikit-learn. В контексте компьютерного зрения входные «признаки» обычно извлекаются моделью глубокого обучения, такой как YOLO26, перед передачей классификатору KNN.
from sklearn.neighbors import KNeighborsClassifier
# Simulated feature vectors (e.g., extracted from YOLO26) and labels
# Features: [Size, Redness], Labels: 0=Apple, 1=Orange
features = [[0.8, 0.9], [0.9, 0.8], [0.2, 0.3], [0.3, 0.2]]
labels = [0, 0, 1, 1]
# Initialize KNN with 3 neighbors
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(features, labels)
# Predict the class of a new object [Size=0.85, Redness=0.85]
prediction = knn.predict([[0.85, 0.85]])
print(f"Predicted Class: {prediction[0]} (0=Apple, 1=Orange)")








