当前位置: 首页 > ops >正文

KNN算法常见面试题

1. KNN算法的核心思想

​KNN (K-Nearest Neighbors,K最近邻) 算法的核心思想是:物以类聚,人以群分。​

在一个样本空间中,如果一个数据点的大部分​​最近邻​​(在特征空间中距离最近的K个点)都属于某个类别,那么这个数据点本身也很可能属于这个类别。

该算法是一种​​基于实例的学习​​或​​懒惰学习​​,它没有显式的训练过程,而是将所有的训练样本都存储起来。当需要对新样本进行预测时,算法会计算新样本与所有训练样本的距离,找到距离最近的K个“邻居”,然后根据这些邻居的信息来进行预测(分类或回归)。


2. KNN处理分类和回归问题的流程

​共同前提​​:都需要先计算待预测样本与所有训练样本之间的距离(如欧氏距离、曼哈顿距离等),并找出距离最近的K个训练样本。

​处理分类问题的流程:​
  1. ​计算距离​​:计算待分类样本与训练集中每个样本的距离。

  2. ​寻找近邻​​:根据距离排序,选取距离最小的K个点。

  3. ​投票决策​​:统计这K个点中每个类别出现的频率。

  4. ​预测结果​​:将频率最高的类别作为待分类样本的预测类别。

​处理回归问题的流程:​
  1. ​计算距离​​:与分类流程相同。

  2. ​寻找近邻​​:与分类流程相同。

  3. ​取值平均​​:取这K个点的目标变量(连续数值)的平均值。

  4. ​预测结果​​:将这个平均值作为待预测样本的预测值。

    • 有时也会根据距离进行加权平均,距离越近的邻居权重越大。


3. K值的选择及影响

​K值对模型的影响:​

  • ​K值过小(例如K=1)​​:

    • ​优点​​:模型复杂度高,对局部细节和噪声更敏感。

    • ​缺点​​:容易过拟合,预测结果容易受个别异常点的影响,模型稳定性差。

  • ​K值过大​​:

    • ​优点​​:模型变得简单,抗噪声能力强,稳定性提高。

    • ​缺点​​:可能会欠拟合,忽略了数据中大量有用的局部模式,预测结果可能偏向于样本数量多的类别(对于分类问题)。

​如何选择合适的K值?​

  • ​没有固定答案​​:K值的选择高度依赖于数据和问题本身。

  • ​常用方法:交叉验证​​。通常的做法是通过交叉验证来评估不同K值(如从1到20)下模型的性能(如准确率、F1分数等),然后选择在验证集上表现最好的那个K值。

  • ​经验值​​:K值一般选择一个​​较小的奇数​​(对于分类问题,为了避免平票),通常不超过训练样本数量的平方根。


4. 特征预处理:归一化与标准化

​为什么需要特征预处理?​

KNN算法的核心是计算距离。如果特征的量纲(单位)或数值范围差异很大,那么数值范围大的特征(如“工资:10000元”)会在距离计算中占据主导地位,而数值范围小的特征(如“年龄:30岁”)的作用几乎会被忽略,从而导致模型产生偏差。预处理就是为了让所有特征处于一个​​可比、公平​​的尺度上。

​归一化 (Normalization) 与标准化 (Standardization) 的区别:​

特性

​归一化 (Normalization)​

​标准化 (Standardization)​

​方法​

将数据​​缩放​​到指定的区间(通常是[0, 1]或[-1, 1])。
公式:Xnorm​=Xmax​−Xmin​X−Xmin​​

将数据转换为​​均值为0,标准差为1​​的正态分布。
公式:Xstd​=σX−μ​

​结果​

数据分布不会改变,只是被压缩到固定范围。

数据分布变为标准正态分布。

​对异常值​

​非常敏感​​。因为最大值和最小值容易受异常点影响。

​不敏感​​。均值和标准差受异常值影响较小。

​适用场景​

适用于​​边界固定​​的场景,如图处理(像素强度必须固定在0-255)。

适用于​​数据分布近似正态​​,或存在异常值的情况。​​更通用​​,在机器学习中更常用。

​总结​​:在大多数机器学习算法(包括KNN)中,​​标准化通常是更好的默认选择​​,因为它对异常值不敏感。归一化则在你知道数据边界且没有极端异常值时很有效。


5. 交叉验证与网格搜索

​交叉验证 (Cross-Validation) 的作用:​

主要用于​​模型评估​​和​​防止过拟合​​。它将训练集分成若干份(如10份),轮流将其中一份作为验证集,其余作为训练集来训练和评估模型,最后取多次评估结果的平均值。这能更可靠地评估模型的泛化能力,比简单的单次训练-测试集划分更稳定。最常用的是​​K折交叉验证​​。

​网格搜索 (Grid Search) 的作用:​

主要用于​​超参数调优​​。它会预先为需要优化的超参数(如KNN中的K值、距离度量方式等)设定一组候选值,然后穷尽地尝试所有可能的参数组合。对于每一种组合,都用交叉验证来评估其性能,最终选出在交叉验证上表现最好的那一组超参数。

​两者结合的优势:​

将网格搜索与交叉验证结合(即​​GridSearchCV​​)是机器学习中的标准调参流程。

  1. ​客观公正​​:网格搜索负责系统地生成参数组合,交叉验证负责客观地评估每一组参数的​​泛化性能​​,避免了模型在特定数据划分上过拟合。

  2. ​自动化与最优化​​:这个组合过程可以自动找到在给定参数范围内​​性能最优​​的超参数组合,无需手动反复试验,大大提高了调参效率和模型效果。

  3. ​结果可靠​​:通过交叉验证得到的性能指标更加稳健和可靠,能更好地反映模型在未知数据上的表现。

http://www.xdnf.cn/news/19296.html

相关文章:

  • C数据结构:排序
  • 第25章学习笔记|额外的提示、技巧与技术(PowerShell 实战版)
  • Qt Core 之 QString
  • PyTorch 张量(Tensor)详解:从基础到实战
  • 【深度学习】配分函数:近似最大似然与替代准则
  • python复杂代码如何让ide自动推导提示内容
  • 编写Linux下usb设备驱动方法:disconnect函数中要完成的任务
  • More Effective C++ 条款20:协助完成返回值优化(Facilitate the Return Value Optimization)
  • 每日算法题【栈和队列】:栈和队列的实现、有效的括号、设计循环队列
  • [软考中级]嵌入式系统设计师—考核内容分析
  • Redis持久化之AOF(Append Only File)
  • Java基础知识(十二)
  • 8.31【Q】CXL-DMSim:
  • vue3+vite+ts 发布npm 组件包
  • Deep Think with Confidence:llm如何进行高效率COT推理优化
  • 第24章学习笔记|用正则表达式解析文本文件(PowerShell 实战)
  • zkML-JOLT——更快的ZK隐私机器学习:Sumcheck +Lookup
  • Pytest 插件介绍和开发
  • leetcode 260 只出现一次的数字III
  • COLA:大型语言模型高效微调的革命性框架
  • 免费电脑文件夹加密软件
  • 基于Adaboost集成学习与SHAP可解释性分析的分类预测
  • 【K8s】整体认识K8s之存储--volume
  • 在win服务器部署vue+springboot + Maven前端后端流程详解,含ip端口讲解
  • Transformer架构三大核心:位置编码(PE)、前馈网络(FFN)和多头注意力(MHA)。
  • 学习Python中Selenium模块的基本用法(12:操作Cookie)
  • TFS-2005《A Possibilistic Fuzzy c-Means Clustering Algorithm》
  • 使用 Python 自动化检查矢量面数据的拓扑错误(含导出/删除选项)
  • 算法题(196):最大异或对
  • 特殊符号在Html中的代码及常用标签格式的记录