机器学习_01_KNN

K近邻算法(K-Nearest Neighbors,KNN)

一、简介

  • KNN是一种**【监督学习算法】**

  • 能解决**【分类任务】**(标签离散)

  • 能解决**【回归任务】**(标签连续)

核心思想

一个样本的类别,由它最近的K个邻居投票决定


二、算法思想

KNN不学任何公式,它只是记住所有训练数据,然后对新来的样本,看它周围最近的K个邻居是什么类别,就跟着投个票。

具体三步

步骤 操作 说明
1 计算距离 新样本和训练集里每一个样本算距离(默认欧式距离)
2 找K个最近邻 按距离从小到大排序,取前K个
3 投票或平均 分类:K个邻居里,哪个类别多,新样本就是哪个类别 回归:K个邻居的标签值取平均,作为预测值

三、距离的度量

距离名称 公式 含义 使用场景
欧式距离 Σ(xᵢ - yᵢ)² 两点间直线距离 最常用(默认)
曼哈顿距离 Σ|xᵢ - yᵢ| 只能走横竖线的街区距离 偶尔用
切比雪夫距离 max(|xᵢ - yᵢ|) 国王移动的最少步数 很少用
闵氏距离 (Σ|xᵢ - yᵢ|^p)^(1/p) 上面三种的统一公式 理论用
其他 余弦距离等 --- 文本场景偶尔用

四、特征的预处理

⚠️ KNN必须做标准化/归一化

原因:KNN靠距离判断。如果特征单位不统一,数值大的特征会主导距离计算,导致预测结果完全被它绑架。


五、K值的选择

K值情况 训练集表现 测试集表现 问题 形象理解
太小(如K=1) 满分 过拟合(学到噪声) 只听一个邻居的话,容易被骗
太大(如K=N) 欠拟合(太模糊) 听全村人的话,反而没主见
合适(如K=3~15) 良好 最好 泛化最佳 听几个靠谱邻居的建议

六、找最佳K

交叉验证

不把命运交给一次验证集,而是把训练数据分成K份,轮流当验证集。

网格搜索

你给几个候选K值(如[3,5,7,9,11]),网格搜索挨个试,交叉验证评估,最后告诉你哪个K值最好。


七、面试总结

KNN是一种基于距离的惰性学习算法,通过找最近的K个邻居来投票(分类)或平均(回归)。

工作原理三步
  1. 算距离(默认欧式距离)

  2. 找K个最近邻

  3. 分类投票,回归平均

核心三要素
要素 说明 关键点
K值 邻居数量 太小过拟合,太大欠拟合 → 用交叉验证+网格搜索选
距离度量 距离计算方式 默认欧式距离
特征预处理 数据标准化 必须标准化/归一化(否则距离被大数值特征绑架)
优缺点
优点 缺点
简单直观,无需训练 预测时慢(要算所有样本的距离)
可解释性强(看邻居) 内存消耗大(要记住所有训练数据)
可用于分类+回归 特征维度高时性能急剧下降(维度灾难)
对异常值不敏感(K足够大时) 必须做特征预处理

KNN适合小数据集、低维度、可解释性要求高的场景。数据量大或维度高时,优先考虑树模型或其他非线性算法。


我是小迦索,一个刚毕业的AI专业学长。 关注我,从0开始,一起走进AI大模型的世界。

相关推荐
字节跳动数据库8 小时前
文章分享——相似函数处理方法
人工智能·后端·程序员
Bigfish_coding8 小时前
前端转agent-【python】-12 LangChain 入门实战:RAG + LCEL 链式调用
人工智能
程序员cxuan8 小时前
读懂 Claude Code 架构分析系列,第一篇,开始!
人工智能·后端·架构
饼干哥哥9 小时前
扣子3.0测评:我让 Codex 和 Claude Code 住同一个桌面,结果它们打架了!
人工智能·开源·代码规范
Token炼金师9 小时前
IP-Adapter:解耦交叉注意力如何让扩散模型看见图像
人工智能
Bigfish_coding9 小时前
前端转agent-【python】-11 LangGraph 高级特性:时间旅行与人工介入
人工智能
Token炼金师9 小时前
从safetensors到像素:ComfyUI Checkpoint加载机制的底层拆解
人工智能
AI闲人9 小时前
AI 写代码越来越快,为什么 Code Review 反而更慢了?
人工智能·code review·ai 编程
武子康10 小时前
调查研究-202 SGLang 深度解析:为什么大模型推理框架不只是“把模型跑起来“
人工智能·openai·agent
我是大卫10 小时前
Trae 读取 agents.md 并驱动 AI 完整底层原理
人工智能