2. 机器学习 - KNN算法
1)是什么
K近邻(K-Nearest Neighbors,简称KNN)是一种直观且易于理解的监督学习方法,广泛应用于分类与回归任务中。其核心思想是:对于一个待预测的新样本,算法会在训练数据中找出与其最相似的K个已知样本(即“邻居”),然后依据这些邻居的信息来决定该样本的类别或输出值。通常使用欧氏距离、曼哈顿距离等度量方式计算样本间的相似性。
???? 小结: KNN是一种典型的“懒惰学习”算法,不进行显式训练过程,而是通过查找最近的K个邻居实现预测,依赖于局部相似性原则。
2)为什么有效
KNN的有效性建立在一个基本假设之上:相似的输入往往具有相似的输出。当数据在空间中呈现出明显的局部聚集特性时,这种“物以类聚”的规律使得KNN能够准确捕捉到潜在模式。此外,由于无需模型训练阶段,KNN直接基于原始数据进行推理,因此实现简单、逻辑清晰,适合快速验证和解释性要求较高的场景。
???? 小结: 基于“相似性驱动”的预测机制,KNN适用于局部结构明显的数据分布,且避免了复杂的建模流程。
3)适用场景
- 数据集规模较小或中等;
- 特征维度较低,变量数量有限;
- 样本在空间中呈现清晰的局部聚集趋势;
- 分类边界复杂、非线性或不规则;
- 需要高可解释性或用于快速原型开发。
???? 小结: 在低维、小样本且局部结构显著的情况下,KNN是一个高效且可靠的初始选择。
4)不适用场景
- 高维数据(易受“维度灾难”影响);
- 训练样本量极大(导致预测速度慢);
- 特征之间存在显著的量纲差异(需预处理);
- 对实时响应有严格要求(每次预测需遍历全部数据);
- 类别严重不平衡(可能偏向多数类)。
???? 小结: 面对高维、大规模或对效率敏感的应用,KNN性能下降明显,应谨慎使用或结合优化手段。
5)总结
KNN作为基础但实用的算法,具备无需训练、逻辑透明、实现简便的优点,特别适用于小规模、低维数据的分类任务。然而,其预测复杂度随数据增长而上升,且对噪声、异常值较为敏感。实际应用中,建议配合特征缩放、降维、距离加权等预处理策略提升鲁棒性和效率。
???? 小结: KNN堪称“懒人算法”的代表——简单直接,适合作为基准模型或入门工具,但在精度与效率之间需合理权衡。
概念扩展
2.1 距离度量方式
在聚类、分类及回归任务中,衡量样本间“相似性”或“差异性”的关键在于距离的选择。不同距离公式适应不同数据特性和应用场景。
2.1.1 曼哈顿距离
又称“城市街区距离”,表示两点在标准坐标系上的绝对轴距总和,仅允许沿坐标轴方向移动。
- 适用场景:高维稀疏数据、具有明确边界结构的特征空间;
- 优点:对异常值鲁棒性强,计算开销小;
- 缺点:忽略变量之间的几何关联,无法反映斜向关系。
???? 小结: 曼哈顿距离适用于网格状路径问题,在L1正则化及相关模型中有广泛应用。
2.1.2 欧式距离
基于勾股定理定义的两点间直线距离,是最符合人类直觉的距离形式。
- 适用场景:连续型数值特征、低维空间中的相似性比较;
- 优点:几何意义明确,广泛用于KNN、K-Means等算法;
- 缺点:受特征尺度影响大,高维下易出现“距离趋同”现象。
???? 小结: 欧式距离是标准几何距离,但使用前应进行归一化处理以消除偏差。
2.1.3 切比雪夫距离
定义为各维度上差值的最大绝对值,即最大坐标差距。
- 适用场景:棋盘上国王移动路径模拟、误差容忍系统设计;
- 优点:关注最不利维度的变化,适合极端情况分析;
- 缺点:忽略其他维度贡献,信息利用率较低。
???? 小结: 切比雪夫距离强调“最大偏差”,适用于对极端偏差敏感的任务控制。
2.1.4 闵可斯基距离
作为多种距离的统一表达形式,其公式随参数p变化而演化:
- 当 p=1 → 对应曼哈顿距离;
- 当 p=2 → 对应欧式距离;
- 当 p→∞ → 趋近于切比雪夫距离。
该距离具备高度灵活性,可通过调节p值适配不同需求。
???? 小结: 闵可夫斯基距离提供了一个通用框架,便于在聚类与相似度分析中动态调整距离行为。
2.2 分类与回归问题的解决流程
无论是分类还是回归任务,通用的建模范式如下:
- 确定任务类型:判断为分类或回归问题;
- 收集并清洗数据;
- 执行特征工程(包括选择、构造与变换);
- 选择合适模型(如KNN);
- 模型拟合(KNN省略此步);
- 交叉验证与超参数调优;
- 模型评估与部署上线。
2.3 特征预处理:归一化与标准化
为了防止某些特征因数值范围过大而主导模型决策,必须进行特征缩放处理。这是提升模型稳定性和性能的关键步骤。
2.3.1 归一化
- 输出范围:[0, 1]
- 常用方法:Min-Max Scaling
- 适用场景:数据分布较稳定、无显著异常值、需要限定区间(如图像像素)
???? 小结: 归一化将原始数据线性压缩至指定区间,常用于神经网络、图像处理等领域。
2.3.2 标准化
- 输出性质:均值为0,标准差为1
- 常用方法:Z-score 标准化
- 适用场景:存在离群点、满足近似正态分布、用于线性模型(如SVM、逻辑回归)
???? 小结: 标准化消除量纲干扰,使特征更具统计一致性,有助于模型更快收敛。
2.4 超参数选择:交叉验证与网格搜索
超参数的选择直接影响模型表现,合理的调参策略至关重要。交叉验证与网格搜索是经典组合方案。
2.4.1 交叉验证
目的:更可靠地评估模型泛化能力,降低过拟合风险。
常用方法包括:
- K折交叉验证(K-Fold CV)
- 留一法(Leave-One-Out)
- 时间序列分割(TimeSeriesSplit)
from sklearn.model_selection import cross_val_score
2.4 模型评估与优化
2.4.1 交叉验证(Cross-Validation)
为提升模型评估的稳定性,避免因训练集和测试集单次划分带来的偶然偏差,常采用交叉验证方法。通过将数据多次划分并计算平均性能,能够更可靠地反映模型的真实表现。 代码示例: scores = cross_val_score(model, X, y, cv=5, scoring='accuracy') 小结: 交叉验证通过多轮数据划分有效降低评估结果的波动性,提供更为稳健的模型性能估计,适用于各类建模任务中的效果验证。2.4.2 网格搜索(Grid Search)
为了系统化地寻找最优超参数组合,可使用网格搜索技术。该方法会遍历预定义参数的所有可能组合,并结合交叉验证选出泛化能力最强的模型配置。 实现方式如下: from sklearn.model_selection import GridSearchCV param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']} grid_search = GridSearchCV(SVC(), param_grid, cv=5) grid_search.fit(X_train, y_train) 小结: 尽管网格搜索在大规模参数空间下计算成本较高,但其对小规模超参数集合具有良好的适用性,能确保不遗漏最佳组合。2.5 模型性能评分指标
模型的表现需要借助量化指标进行衡量,不同任务类型对应不同的评价标准。2.5.1 model.score() 方法
该方法用于快速获取模型在指定数据集上的默认评分结果。 - 分类任务中:返回准确率(accuracy) - 回归任务中:返回决定系数 R 使用示例: score = model.score(X_test, y_test) print(f"R Score: {score}") 小结: model.score() 提供了一种简便的评估手段,但在实际应用中应确认其默认指标是否符合当前问题的需求,必要时替换为更合适的度量方式。2.5.2 accuracy_score() 函数
专用于分类任务中准确率的精确计算,其公式为: 准确率 = 正确预测的样本数 / 总样本数 调用方式: from sklearn.metrics import accuracy_score acc = accuracy_score(y_true, y_pred) 注意事项:当类别分布极度不平衡时,准确率可能产生误导,建议配合 F1 分数、AUC 等更具鲁棒性的指标共同分析。 小结: accuracy_score() 是最直观的分类性能指标之一,适合初步分析;但在非均衡数据场景下需谨慎解读。2.6 综合总结
| 主题 | 关键点 | 推荐使用场景 | |------------------|----------------------------------------|----------------------------------| | 距离计算 | 曼哈顿距离、欧式距离、切比雪夫距离、闵可夫斯基距离 | 聚类分析、相似性匹配 | | 特征预处理 | 归一化与标准化的选择 | 数据缩放前的必要步骤 | | 交叉验证 | K折交叉验证、时间序列专用划分 | 防止过拟合,增强模型稳定性 | | 网格搜索 | 全面搜索超参数组合 | 参数空间较小且追求最优解的情况 | | 模型评分 | 使用 .score() 和 accuracy_score() | 快速评估模型整体表现 | 最终建议: 建模流程中应始终遵循“先特征预处理 → 再结合交叉验证与网格搜索优化模型 → 最后从多个维度综合评估性能”的原则,以确保结果的可靠性与实用性。


雷达卡


京公网安备 11010802022788号







