K 近邻(K-Nearest Neighbors, KNN)是一种“把历史样本存起来,来新样本就看它附近 K 个邻居”的监督学习(supervised learning)方法:分类时邻居投票,回归时取邻居均值。
它几乎没有“训练”过程。所谓训练,只是把特征和标签保存下来;真正干活在推理:计算新样本与训练集中每个样本的距离,排序,取前 K 个。打个生活化比方:想知道一套房大概值多少,不建房价公式,而是翻出附近最近成交的 K 套房,取平均。找邻居要先量距离,数据越多、维度越高,量得越久,所以 KNN 的典型特征是“训练快、推理慢”。朴素实现如此;有些实现会建索引加速查询,但核心仍是在推理时找邻居。
效果高度依赖特征尺度。若用欧氏距离(Euclidean distance),身高按米、收入按元,收入数值大,距离几乎被它主导。因此要先做特征缩放(feature scaling),常用标准化(standardization)。K 也关键:K 太小易被噪声带偏,K 太大把远处样本也算进来,需要做AI 词典:偏差-方差权衡">偏差-方差权衡。距离度量还可选曼哈顿、余弦等,选什么取决于“相似”的定义。
和相邻概念的区别:KNN 是非参数(non-parametric)、惰性学习(lazy learning),没有显式训练出的参数;线性回归、逻辑回归训练后得到参数,推理只做一次计算;K-means 是无监督聚类,把样本分组,而 KNN 是有监督,用标签投票。
| 方法 | 学习方式 | 训练/推理 | 典型用途 |
|---|---|---|---|
| KNN | 有监督、非参数、惰性 | 训练几乎只存数据,推理算距离投票 | 小数据分类回归、相似检索基线 |
| 线性/逻辑回归 | 有监督、参数 | 训练求参数,推理快 | 可解释基线、线性关系 |
| K-means | 无监督聚类 | 迭代求簇心 | 分组、压缩、探索 |
对从业者,KNN 适合小数据、低维、需要可解释基线的场景;大规模高维或实时推理要谨慎,常需降维或近似最近邻(Approximate Nearest Neighbor, ANN)索引。对普通人,它提醒我们“物以类聚”成立的前提是:距离怎么定义、尺度是否公平,决定了邻居是谁。
