基于实例的学习:最近邻算法及其现代演进
基于实例的学习,以其直观性、非参数特性和强大的局部适应能力,在机器学习领域占据了独特而持久的位置。从经典的KNN算法到现代深度度量学习和少样本学习,其“通过比较相似实例进行推理”的核心思想历久弥新。它不仅是理解机器学习多样性的重要范例,也是解决许多实际问题(特别是当数据复杂、定义全局模型困难时)的有效工具。尽管面临维度灾难和计算效率的挑战,但随着索引算法、近似搜索和表示学习的发展,这一范式必将在人
本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!
引言
在机器学习的广阔谱系中,大多数模型(如深度神经网络、支持向量机)通过从训练数据中抽象出一个紧凑的、参数化的模型来工作。与之形成鲜明对比的是另一类直观而强大的方法——基于实例的学习。这类方法的核心思想是:不做或仅做极少的显式泛化,而是将训练实例本身存储为“知识”,并在预测时通过比较新实例与存储实例的相似性来得出结论。就像人类通过回忆过往相似经历来做判断一样,这类算法是“记忆驱动”的典范。其中最著名、最基础的代表便是最近邻算法。
本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!
往期文章推荐:
- 20.高维空间中的高效导航者:球树(Ball Tree)算法深度解析
- 19.闵可夫斯基距离:机器学习的“距离家族”之源
- 18.贝叶斯错误率:机器学习性能的理论极限
- 17.马哈拉诺比斯距离:理解数据间的“真实”距离
- 16.多维空间的高效导航者:KD树算法深度解析
- 15.曼哈顿距离:概念、起源与应用全解析
- 14.正态分布:机器学习中的统计基石与高斯遗产
- 13.Sigmoid函数:从生物生长曲线到神经网络激活的桥梁
- 12.Softmax函数:深度学习中的多类分类基石与进化之路
- 11.ROUGE-SU4:文本摘要评估的跳连智慧
- 10.概率单位回归(Probit Regression)详解
- 9.TAC-2010数据集:知识库填充的里程碑
- 8.DUC-2004数据集:文档摘要研究的里程碑
- 7.Probit变换:从概率到正态分位数的桥梁
- 6.Logit变换:从概率到对数几率的桥梁
- 5.序贯检验:动态决策的统计理论与应用实践
- 4.多臂老虎机问题:基础理论、算法与应用全解析
- 3.统计显著性:从基础概念到现代应用实践
- 2.贝塔二项分布:理论、应用与实践
- 1.ICA(独立成分分析):从混合信号中分离真相的艺术
核心概念阐述
基于实例的学习,常被称为基于记忆的学习或懒惰学习。其工作流程与传统“急切学习”模型截然不同:
- 训练阶段:算法简单地存储(或索引)整个训练数据集 D = { ( x i , y i ) } i = 1 N D = \{(\mathbf{x}_i, y_i)\}_{i=1}^N D={(xi,yi)}i=1N。几乎不进行任何计算,或仅进行如数据归一化、索引构建等预处理。这是其“懒惰”之称的由来。
- 预测阶段:当收到一个新查询实例 x q \mathbf{x}_q xq 时,算法在存储的数据集中搜索与 x q \mathbf{x}_q xq “最相似”的实例,并基于这些邻居的信息(如多数投票、距离加权平均)来预测 y q y_q yq。
这种范式的核心优势在于其模型构造被延迟到了预测阶段,使得算法能够自适应地利用与当前查询最相关的局部信息,而非强迫使用一个全局固定的模型。
K-最近邻算法是这种范式的标准实现。其预测规则如下:
- 分类任务:对于查询点 x q \mathbf{x}_q xq,找出其K个最近邻,然后通过这K个邻居类别的 多数投票 决定预测类别。
- 回归任务:对于查询点 x q \mathbf{x}_q xq,找出其K个最近邻,然后将这K个邻居目标值的 (加权)平均值 作为预测值。
KNN算法的理论基石由Cover和Hart奠定,他们从贝叶斯决策理论的角度证明了在样本数趋于无穷时,最近邻分类器的错误率不超过贝叶斯最优错误率的两倍 (Cover & Hart, 1967)。
技术细节与挑战
尽管概念简单,但构建一个高效的基于实例的学习系统涉及几个关键技术选择与挑战:
-
距离度量:这是定义“相似性”的核心。选择取决于数据类型:
- 欧氏距离:适用于连续数值特征,是最常见的选择。
- 曼哈顿距离:对异常值不如欧氏距离敏感。
- 余弦相似度:适用于高维稀疏数据(如文本TF-IDF向量),衡量方向而非绝对距离。
- 汉明距离:适用于分类数据或二进制数据(如上一篇文章所述)。
距离度量的选择直接影响算法的归纳偏置和性能。
-
K值选择:K是一个关键的超参数。
- K值较小(如K=1):模型复杂度高,决策边界非常不规则,对局部噪声敏感,容易过拟合。
- K值较大:模型复杂度低,决策边界平滑,但可能忽略有用的局部模式,导致欠拟合。
通常通过交叉验证来选择合适的K值。
-
维度灾难:这是基于实例学习面临的根本性挑战。在高维空间中,所有数据点之间的距离都变得趋于相似,这使得“最近邻”的概念变得模糊,区分度下降,性能急剧恶化 (Beyer, Goldstein, Ramakrishnan, & Shaft, 1999)。这凸显了特征选择或降维预处理的重要性。
-
计算效率:预测时需要遍历整个数据集计算距离,时间复杂度为 O ( N ) O(N) O(N),对于大规模数据集和在线应用是不可接受的。为此,研究者开发了多种空间索引结构(如KD-Tree、Ball Tree)和近似最近邻搜索(ANN)算法(如基于局部敏感哈希(LSH)的方法),以亚线性时间完成搜索 (Indyk & Motwani, 1998)。
-
加权与核方法:一个自然的扩展是为不同的邻居赋予不同的权重,通常权重与其到查询点距离的倒数相关(如 w i = 1 / d ( x q , x i ) w_i = 1 / d(\mathbf{x}_q, \mathbf{x}_i) wi=1/d(xq,xi) )。这可以被视为一种核方法,其中核函数定义了局部影响的衰减方式。
前沿应用与演进
基于实例的范式并未因深度学习的崛起而过时,反而以新的形式融入了现代AI架构:
-
深度度量学习:深度神经网络被用来学习一个嵌入空间,使得在该空间中,简单的距离度量(如欧氏距离)能更好地反映语义相似性。训练完成后,在该嵌入空间中使用KNN进行分类或检索,性能远超在原始像素空间中使用KNN (Schroff, Kalenichenko, & Philbin, 2015)。
-
Few-Shot Learning:在仅提供少量支持样本的新任务上,基于实例的“比较”思想大放异彩。匹配网络 (Matching Networks) 和原型网络 (Prototypical Networks) 等模型,本质上是学习一个可微的、注意力加权的“最近邻”分类器,在嵌入空间中计算查询样本与每个类别的原型(支持样本的均值)之间的距离,从而实现快速泛化 (Vinyals et al., 2016; Snell, Swersky, & Zemel, 2017)。
代码示例
以下示例展示了如何使用scikit-learn库快速实现一个KNN分类器,并演示距离加权的影响。
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
# 加载并准备鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 特征标准化(对基于距离的算法至关重要)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 示例1:标准KNN(均匀权重)
knn_uniform = KNeighborsClassifier(n_neighbors=5, weights='uniform') # 多数投票
knn_uniform.fit(X_train_scaled, y_train)
y_pred_uniform = knn_uniform.predict(X_test_scaled)
print(f"均匀权重KNN准确率: {accuracy_score(y_test, y_pred_uniform):.4f}")
# 示例2:距离加权KNN
knn_distance = KNeighborsClassifier(n_neighbors=5, weights='distance') # 权重与距离成反比
knn_distance.fit(X_train_scaled, y_train)
y_pred_distance = knn_distance.predict(X_test_scaled)
print(f"距离加权KNN准确率: {accuracy_score(y_test, y_pred_distance):.4f}")
该示例直观展示了如何通过修改weights参数实现不同的基于实例的决策规则。
总结
基于实例的学习,以其直观性、非参数特性和强大的局部适应能力,在机器学习领域占据了独特而持久的位置。从经典的KNN算法到现代深度度量学习和少样本学习,其“通过比较相似实例进行推理”的核心思想历久弥新。它不仅是理解机器学习多样性的重要范例,也是解决许多实际问题(特别是当数据复杂、定义全局模型困难时)的有效工具。尽管面临维度灾难和计算效率的挑战,但随着索引算法、近似搜索和表示学习的发展,这一范式必将在人工智能的未来探索中继续扮演关键角色。⚙️
本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!
更多推荐

所有评论(0)