K-Nearest Neighbors (KNN)
探索 K-近邻 (KNN)。了解该监督学习算法在分类和回归中的工作原理、在视觉搜索中的用途,以及与 Ultralytics YOLO26 的集成。
K最近邻(KNN)是监督学习领域中用于分类和回归任务的强大且直观的算法。以简单性著称的 KNN 通常被称为“懒惰学习器”,因为它在训练阶段不构建模型或学习参数。相反,它会记住整个训练数据集,并仅在请求预测时执行计算。该算法的核心原理依赖于特征相似性:它假设具有相似属性的数据点在多维特征空间中彼此相邻。
算法如何运作#
K-Nearest Neighbors 的机制由距离计算驱动。当引入新的查询点时,算法会搜索存储的数据集,找到与新输入最接近的 'K' 个训练样本。
-
距离测量:系统计算查询点与数据库中所有其他点之间的距离。最常用的度量标准是欧氏距离,它测量点之间的直线距离。根据数据类型,也可以使用其他度量标准,例如曼哈顿距离(出租车几何)或明可夫斯基距离。
-
邻居选择:计算距离后,算法会对距离进行排序,并识别出前 'K' 个最近的条目。
-
决策制定:- 分类任务:该算法使用“多数表决”系统。将 K 个邻居中出现频率最高的类别标签分配给查询点。这广泛用于基础图像分类任务。- 回归任务:通过对 K 个最近邻的值进行平均来计算预测,以估计连续变量。
选择合适的 'K' 值#
为 'K' 选择最佳值是超参数调优中的关键步骤。K 的选择显著影响模型的性能及其对新数据的泛化能力。
实际应用#
尽管与深度神经网络相比非常简单,但 KNN 在现代人工智能中仍然高度相关,特别是在与先进的特征提取技术结合使用时。
- 推荐系统:KNN 在媒体流和电子商务中促进协同过滤。通过识别具有相似观看历史或购买行为的用户(邻居),平台可以根据其“最近邻”的偏好,推荐用户可能喜欢的商品。
- 异常检测:在网络安全和金融领域,KNN 用于异常检测。交易或网络活动被映射在特征空间中;任何远离“正常”活动密集集群的新数据点都被标记为潜在欺诈或安全漏洞。
- 视觉搜索:现代向量搜索引擎通常依赖于近似最近邻(ANN)算法(KNN 的优化变体),以便根据由 YOLO26 等模型生成的的高维嵌入快速检索相似图像。
挑战与注意事项#
尽管有效,但 KNN 面临着维度灾难。随着特征(维度)数量的增加,数据点变得稀疏,距离度量的有效性降低。此外,由于它存储了所有训练数据,KNN 可能会占用大量内存,并在大型数据集上遭受高推理延迟的困扰。为了解决这个问题,从业者通常会使用诸如主成分分析 (PCA) 之类的降维技术来预处理数据,或者使用诸如 KD-Trees 之类的专用数据结构来加速搜索。为了实现数据集和模型训练的企业级扩展,利用 Ultralytics Platform 可以帮助管理处理复杂数据所需的计算资源。
区分 KNN 和 K-Means#
区分 K最近Neighbors 与K-Means 聚类非常重要,因为它们相似的名称经常引起混淆。
- KNN 是一种监督学习算法,使用标记数据进行预测。
- K-Means 是一种**无监督学习**算法,用于根据结构相似性将未标记的数据分组到集群中。
实现示例#
以下代码片段演示了使用流行的 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)")





