Explore K-Nearest Neighbors (KNN) for classification and regression. Learn how this intuitive algorithm works with distance metrics and [YOLO26](https://docs.ultralytics.com/models/yolo26/) embeddings on the [Ultralytics Platform](https://platform.ultralytics.com).
K最近邻(KNN)是一种稳健且直观的算法,在监督学习领域中同时适用于分类和回归任务。其简洁性使其常被归类为"懒惰学习者"——在训练阶段既不构建模型也不学习参数。 相反,它会完整存储整个训练数据集,仅在需要预测时才进行计算。该算法的核心原理基于特征相似性:它假设在多维特征空间中,具有相似属性的数据点彼此邻近。
K最近邻算法的运作机制基于距离计算。当引入新查询点时,该算法会在存储的数据集中搜索出与新输入点距离最近的K个训练样本。
选择'K'的最佳值是超参数调优的关键步骤。K值的选择显著影响模型的性能及其对新数据的泛化能力。
尽管相较于深度神经网络更为简单,KNN在现代人工智能领域仍具有重要意义,尤其当其与先进的特征提取技术相结合时。
尽管有效,KNN仍面临维度诅咒问题。随着特征(维度)数量增加,数据点变得稀疏,距离度量法将失效。此外,由于需要存储全部训练数据,KNN在处理大型数据集时可能消耗大量内存并导致推理延迟。 为解决此问题,实践者常采用主成分分析(PCA) 等降维技术预处理数据,或使用KD树等专用数据结构加速搜索。针对企业级数据集扩展与模型训练需求Ultralytics 可有效管理复杂数据预处理所需的计算资源。
区分K最近邻算法与K均值聚类法至关重要, 因其名称相似常易引发混淆。
以下代码片段演示了使用流行的Scikit-learn库实现的简单KNN分类工作流。在计算机视觉场景中,输入的"特征"通常会先通过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)")