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 在现代 AI 中仍然具有很高的相关性,尤其是在结合先进的特征提取技术时。
- 推荐系统:KNN 支持媒体流媒体和电子商务中的协同过滤。通过识别具有相似观看历史或购买行为的用户(邻居),平台可以根据用户“最近邻”的偏好,推荐用户可能喜欢的产品。
- 异常检测:在网络安全和金融领域,KNN 用于异常检测。交易或网络活动会映射到特征空间中;任何远离“正常”活动密集簇的新数据点,都会被标记为潜在欺诈或安全漏洞。
- 视觉搜索:现代向量搜索引擎通常依赖近似最近邻(ANN)算法——这是 KNN 的一种优化变体——根据由YOLO26等模型生成的高维嵌入,快速检索相似图像。
挑战与注意事项#
虽然 KNN 很有效,但它面临维度灾难。随着特征数量(维度)增加,数据点会变得稀疏,距离度量也会失去有效性。此外,由于 KNN 会存储所有训练数据,因此可能占用大量内存,并且在大型数据集上产生较高的推理延迟。为了解决这一问题,实践者通常会使用降维技术(如主成分分析(PCA))对数据进行预处理,或使用KD 树等专用数据结构来加快搜索速度。对于数据集和模型训练的企业级扩展,使用Ultralytics Platform可以帮助管理预处理复杂数据所需的计算资源。
区分 KNN 与 K-Means#
区分 K 近邻与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)")








