K-Nearest Neighbors (KNN)
Изучи метод K-ближайших соседей (KNN). Узнай, как этот алгоритм обучения с учителем работает для классификации и регрессии, его использование в визуальном поиске и интеграцию с Ultralytics YOLO26.
K-Nearest Neighbors (KNN) — это надежный и интуитивно понятный алгоритм, используемый в области обучения с учителем как для задач классификации, так и для регрессии. Отличаясь своей простотой, KNN часто классифицируется как «ленивый ученик» (lazy learner), потому что он не строит модель и не изучает параметры на этапе обучения. Вместо этого он запоминает весь набор обучающих данных и выполняет вычисления только тогда, когда требуется прогноз. Основной принцип алгоритма основан на сходстве признаков: он предполагает, что точки данных со схожими атрибутами находятся в непосредственной близости друг от друга в многомерном пространстве признаков.
Link to this sectionКак работает алгоритм#
Механизм K-Nearest Neighbors основан на вычислении расстояний. Когда появляется новая точка запроса, алгоритм ищет в сохраненном наборе данных 'K' обучающих образцов, наиболее близких к новым входным данным.
-
Измерение расстояния: Система вычисляет расстояние между точкой запроса и каждой другой точкой в базе данных. Наиболее распространенной метрикой является евклидово расстояние, которое измеряет расстояние по прямой между точками. В зависимости от типа данных могут использоваться другие метрики, такие как манхэттенское расстояние (геометрия городских кварталов) или расстояние Минковского.
-
Выбор соседей: После вычисления расстояний алгоритм сортирует их и определяет 'K' ближайших записей.
-
Принятие решений: - Для классификации: Алгоритм использует систему «голосования большинства». Метка класса, которая встречается чаще всего среди K соседей, присваивается точке запроса. Это широко используется в базовых задачах классификации изображений. - Для регрессии: Прогноз вычисляется путем усреднения значений K ближайших соседей для оценки непрерывной переменной.
Link to this sectionВыбор подходящего 'K'#
Выбор оптимального значения 'K' — критический шаг при настройке гиперпараметров. Выбор K существенно влияет на производительность модели и её способность обобщать новые данные.
- Малое значение K: Маленькое K (например, K=1) делает модель очень чувствительной к шуму и выбросам в данных, что может привести к переобучению.
- Большое значение K: Большое K сглаживает границы принятия решений, уменьшая влияние шума, но потенциально размывая четкие закономерности, что приводит к недообучению.
Link to this sectionРеальные приложения#
Несмотря на свою простоту по сравнению с глубокими нейронными сетями, KNN остается весьма актуальным в современном ИИ, особенно в сочетании с передовыми методами извлечения признаков.
- Системы рекомендаций: KNN способствует коллаборативной фильтрации в медиа-стриминге и электронной коммерции. Определяя пользователей с похожей историей просмотров или поведением при покупках (соседей), платформы могут предлагать продукты, которые, скорее всего, понравятся пользователю, основываясь на предпочтениях его «ближайших соседей».
- Обнаружение аномалий: В кибербезопасности и финансах KNN используется для обнаружения аномалий. Транзакции или сетевые действия отображаются в пространстве признаков; любая новая точка данных, которая попадает далеко от плотных кластеров «нормальной» активности, помечается как потенциальное мошенничество или нарушение безопасности.
- Визуальный поиск: Современные движки векторного поиска часто полагаются на алгоритмы приблизительного поиска ближайших соседей (ANN) — оптимизированную вариацию KNN — для быстрого извлечения похожих изображений на основе высокоразмерных эмбеддингов, созданных такими моделями, как YOLO26.
Link to this sectionПроблемы и соображения#
Несмотря на свою эффективность, KNN сталкивается с проклятием размерности. По мере увеличения количества признаков (размерностей) точки данных становятся разреженными, а метрики расстояния теряют свою эффективность. Кроме того, поскольку KNN хранит все обучающие данные, он может быть ресурсоемким по памяти и страдать от высокой задержки вывода на больших наборах данных. Чтобы решить эту проблему, специалисты часто предварительно обрабатывают данные с помощью методов снижения размерности, таких как метод главных компонент (PCA), или используют специализированные структуры данных, такие как KD-деревья, для ускорения поиска. Для масштабирования наборов данных и обучения моделей корпоративного уровня использование Ultralytics Platform поможет тебе управлять вычислительными ресурсами, необходимыми для предварительной обработки сложных данных.
Link to this sectionОтличие KNN от K-Means#
Важно отличать K-Nearest Neighbors от кластеризации K-Means, поскольку их похожие названия часто вызывают путаницу.
- KNN — это алгоритм обучения с учителем, который использует размеченные данные для прогнозирования.
- K-Means — это алгоритм обучения без учителя, используемый для группировки неразмеченных данных в кластеры на основе структурного сходства.
Link to this sectionПример реализации#
Следующий фрагмент кода демонстрирует простой рабочий процесс классификации 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)")





