最近邻算法 (kNN) 通俗讲解

最近邻算法,全称 k-Nearest Neighbors (kNN),是一种简单却强大的机器学习算法。它属于“监督学习”的一种,主要用于分类(比如判断一个东西属于哪个类别)和回归(预测一个数值)。通俗点说,kNN 就像“物以类聚,人以群分”的道理:你想知道一个新事物是什么样的,就看看它周围最近的 k 个“邻居”是怎么样的,然后根据多数邻居的意见来决定。

想象一下,你去一个派对上,看到一个陌生人。你想猜猜他是做什么工作的?如果你看他身边最近的 5 个人(k=5),其中 3 个是程序员,2 个是设计师,那你很可能猜他是程序员。这就是 kNN 的核心想法——“近朱者赤,近墨者黑”。

kNN 的工作原理

kNN 算法超级懒惰,它不像其他算法需要花时间“训练”模型。训练阶段只是把所有已知的数据点存起来(比如每个点的特征和标签)。当有一个新数据点来时,它才会开工:

  1. 计算距离:测量新点到所有已知点的“距离”。距离可以用欧几里得距离(直线距离),就像在地图上量两点间的最短路径。
  2. 找邻居:选出距离最近的 k 个点作为邻居。k 是你自己设定的,通常是奇数(如 1、3、5),避免平票。
  3. 投票或平均
    • 如果是分类:看这 k 个邻居中哪个类别最多,就给新点贴上那个标签。
    • 如果是回归:取 k 个邻居的平均值作为预测。

这张图在讲k-最近邻(kNN, k-Nearest Neighbors)的核心思想:

“看新来的点,离谁近,就更像谁。”


1) 图里都画了什么?

  • 蓝色方块:Class 1(类别1)

  • 红色三角:Class 2(类别2)

  • 中间带问号的点:New example to classify(要分类的新样本)

  • 黑色箭头标 “Distance”:表示距离(新样本到训练样本的远近)

  • 两个圈:

    • 小圈标K=1:只看最近的 1 个邻居

    • 大圈标K=3:看最近的 3 个邻居


2) kNN 到底怎么工作?(一句话版)

把新样本放到“点群”里,算它到每个已知样本的距离,选出最近的k 个,用它们的“投票结果”决定新样本属于哪一类。


3) 用图来理解:K=1 vs K=3

✅ K = 1(最近的 1 个邻居)

  • 新点只听“离它最近的那一个点”的意见。

  • 优点:很灵敏,边界能画得很细

  • 缺点:容易被“噪声点/偶然点”带偏(比如最近那个点刚好是个例外)

✅ K = 3(最近的 3 个邻居)

  • 新点会找最近的 3 个点,看看哪个类别“票数多”。

  • 例如最近 3 个里:2 个红三角、1 个蓝方块 → 新点判为红三角那类。

  • 优点:更稳健,不容易被单个异常点影响

  • 缺点:k 太大又会变“迟钝”,把边界抹平,细节丢失


4) kNN 的“算法步骤”(通俗版)

  1. 准备数据:每个训练样本都有特征(坐标/属性)和标签(类别)

  2. 选距离公式:常见是欧氏距离(直线距离)

  3. 对新样本:计算它到所有训练样本的距离

  4. 选最近 k 个:距离最小的 k 个邻居

  5. 做决定

    • 分类:多数投票(谁多听谁)

    • 回归:取平均(或加权平均)


5) 关键点:距离怎么算才靠谱?

kNN 完全靠“距离”,所以最怕这个问题:

某个特征数值范围特别大,会把距离“带跑偏”。

例子:身高用 cm(100~200),体重用 kg(40~120),还好;
如果一个特征是“年收入(0~1,000,000)”,距离几乎全由它决定了。

所以 kNN 常见必做操作:

  • 特征归一化/标准化(把不同量纲拉到同一尺度)


6) k 怎么选?(经验直觉)

  • k 小:更像“贴脸判断”,容易过拟合(太敏感)

  • k 大:更像“看大局”,容易欠拟合(太迟钝)

  • 常用做法:从奇数开始试(3、5、7…),用验证集选效果最好的(避免平票)


7) kNN 的优缺点(你可以这样记)

👍 优点

  • 简单直观:不用训练复杂模型

  • 适合“相似即同类”的问题:比如图像/文本向量相似度、推荐等

👎 缺点

  • 预测慢:来一个新样本就要算一堆距离(数据大时很耗)

  • 对尺度/噪声敏感:不归一化就容易翻车

  • 维度高会变难(“维度灾难”:高维里距离变得不再可靠)

下面用一个特别小的“二维玩具数据”(像图里这样几颗点),带你手算一遍:算距离 → 选 k 个 → 投票 → 得出类别。这样你会一下子把 kNN 吃透。

例子设置(二维平面上)

我们要给新点P(2, 2)分类。

训练数据(已知类别):

  • 蓝色方块 Class 1

    • S1 = (2, 1)

    • S2 = (3, 2)

    • S3 = (1, 2)

  • 红色三角 Class 2

    • T1 = (2, 2.1) ← 特意放得很近(像“噪声点/偶然点”)

距离用最常见的欧氏距离


第一步:算 P 到每个点的距离(手算)

1) 到红三角 T1(2, 2.1)

d(P,T1)=0.1

2) 到蓝方块 S1(2, 1)

d(P,S1)=1

3) 到蓝方块 S2(3, 2)

d(P,S2)=1

4) 到蓝方块 S3(1, 2)

d(P,S3)=1


第二步:按距离从小到大排序

  1. T1(红)距离0.1

  2. S1(蓝)距离1

  3. S2(蓝)距离1

  4. S3(蓝)距离1


第三步:选不同的 k 来“投票”

✅ k = 1(只看最近的 1 个邻居)

最近的是:T1(红)

所以P 判为红色 Class 2

直觉:离哪个点最近,就像哪个点。


✅ k = 3(看最近的 3 个邻居)

最近 3 个是:

  • T1(红)

  • S1(蓝)

  • S2(蓝) (或 S3 也一样)

投票结果:蓝 2 票,红 1 票
所以P 判为蓝色 Class 1

直觉:别只听一个人的意见,听“附近小圈子”的多数意见更稳。


你从这个例子学到的关键感觉

  • k 小(如 1):特别敏感,容易被“很近的偶然点/噪声点”带偏

  • k 大(如 3):更稳健,看整体邻居多数意见


加餐:如果用“距离加权投票”,会怎样?

有些 kNN 不用“每人一票”,而是离得越近,权重越大

比如权重(只是示意):

  • T1:

  • S1:

  • S2:

加权后:

  • 红:10

  • 蓝:1+1=2

这时即使k=3,也可能判为

直觉:特别近的邻居,说话更有分量。

我们继续把“k 变大时会发生什么”讲得更直观:同一个新点 P,用k=1、3、5、7分别投票,你会看到它的判别会从“很敏感”慢慢变“更平滑、更稳定”。


继续用一个更接近图的点集

还是要分类新点:P(2,2)

我把训练点扩大一点(想象成图里更大一圈):

蓝色 Class 1(方块)

  • B1 (2, 1)

  • B2 (3, 2)

  • B3 (1, 2)

  • B4 (4, 2)

  • B5 (2, 0)

红色 Class 2(三角)

  • R1 (2, 2.1) (非常近)

  • R2 (0, 2)

  • R3 (2, 4)

  • R4 (3, 4)


第一步:把距离都算出来(我把结果给你,重点看排序)

用欧氏距离

离 P 最近的一批(按从小到大)

  1. R1(2,2.1):0.1(红)

  2. B1(2,1):1(蓝)

  3. B2(3,2):1(蓝)

  4. B3(1,2):1(蓝)

  5. R2(0,2):2(红)

  6. B4(4,2):2(蓝)

  7. R3(2,4):2(红)

  8. B5(2,0):2(蓝)

  9. R4(3,4)(红)

你可以把它想成:小圈包含前 1~3 个,大圈包含前 5~7 个。


第二步:分别用不同 k 投票

✅ k = 1

最近 1 个:R1(红)
➡️判红


✅ k = 3

最近 3 个:R1(红) + B1(蓝) + B2(蓝)
红 1 vs 蓝 2
➡️判蓝


✅ k = 5

最近 5 个:R1(红) + B1(蓝) + B2(蓝) + B3(蓝) + R2(红)
红 2 vs 蓝 3
➡️判蓝


✅ k = 7

最近 7 个:再加上 B4(蓝) + R3(红)
红 3 vs 蓝 4
➡️判蓝


你刚刚看到的现象:为什么 k 变大更“稳”?

  • k=1 时,P 被那个“贴得极近”的红点 R1 一把带走 →很敏感

  • k=3、5、7 时,附近多数是蓝点 →多数投票压住了偶然噪声

这就是图里强调的:
K=1 可能很“冲动”;K=3/5 更“理性”。


但 k 也不能无限大:太大就会“看远了”

想象你把 k 选到非常大(几乎把远处点都算进来),那 P 的判断会越来越像:

  • “这个数据集总体哪类多,我就判哪类”
    而不是“P 附近更像哪类”。

所以 k 的选择永远在平衡两件事:

  • 小 k:更贴近局部细节(但易受噪声影响)

  • 大 k:更平滑更稳(但可能忽略局部结构)


最实用的三条经验(你以后用 kNN 就靠它)

  1. k 先选奇数(3、5、7…)避免平票

  2. 特征一定要归一化/标准化(否则距离没意义)

  3. 用验证集挑 k:

    • 试 k=1,3,5,7,9…

    • 哪个准确率最好用哪个

总之,kNN 就像一个靠谱的“街坊邻居咨询师”,适合小数据集和快速原型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1160226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch深度学习笔记16

目录 摘要 1.AdaGrad 2.RMSProp 3.Adam 摘要 本篇文章继续学习尚硅谷深度学习教程,学习内容是AdaGrad,​​​​​​​RMSProp,Adam 1.AdaGrad AdaGrad(Adaptive Gradient,自适应梯度)会为每个参数适当…

Spring 事务核心知识点全梳理(编程式 + 声明式 + 注解详解)

一、事务的基础概念1. 什么是事务?事务是一组不可分割的操作集合,这组操作要么 “同时成功”,要么 “同时失败”(即 “原子性”)。比如转账时 “扣 A 账户钱 加 B 账户钱”,这两步必须作为一个整体执行&am…

【源码 + 文档】SpringBoot+Vue 开发网上购物商城系统(附完整设计文档)

【源码 文档】SpringBootVue 开发网上购物商城系统(附完整设计文档) 哈喽,我是你们的技术干货博主~今天给大家分享一个基于 SpringBootVue 开发的网上购物商城系统,包含前端商城 后端管理系统,还附带了完…

OpenCode:开源AI代理如何改变你的编程工作流

OpenCode是开源AI编码代理工具,代表AI编程从"补全"到"对话"再到"代理"的演进。它采用终端优先设计,支持多会话并行、MCP生态扩展,强调隐私与可控性。文章详解了其核心优势:开源可控、终端优先工作流…

对 两种不同AI范式——Transformer 和 LSTM 进行解剖和对比

这不仅仅是两个模型的比较,更是两种AI范式的对话。一、 设计哲学:两种世界观维度LSTM的世界观Transformer的世界观核心隐喻时间的诗人:认为世界是动态的、连续的流。理解当下,必须回顾过去,记忆在时间中流淌和演变。空…

支持向量机 (SVM) 通俗解读

想象一下,你是一个老师,要把一群调皮的学生分成两队:一队爱踢足球的,一队爱打篮球的。你不想让他们混在一起打架,所以你需要在操场上画一条线,把两队分开。但不是随便画一条,你要画得尽可能宽敞…

【正点原子STM32MP157学习篇】A7和M4联合调试(通过STM32CubeIDE)

文章目录1 概要2 Remoteproc 框架简介2.1 Remoteproc 框架2.2 实验准备2.2.1 硬件连接2.2.2 启动 Linux 操作系统3 使用 STM32CubeIDE 进行调试3.1 操作步骤3.2 fw_cortex_m4.sh 脚本分析1 概要 本章节将介绍如何A7和M4进行联合调试,我们在分析 STM32CubeMP1 固件包…

提示工程架构师别再等!Agentic AI的3大市场优势,已经让同行抢先一步了

提示工程架构师别再等!Agentic AI的3大市场优势,已经让同行抢先一步了关键词:Agentic AI 提示工程 自主决策 工具协同 商业效率 摘要:当你还在为“如何写更好的提示”绞尽脑汁时,同行已经用Agentic AI(智能…

【MIMO OFDM】小波变换MIMO OFDM通信仿真【含Matlab源码 14928期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…

深度测评8个AI论文工具:本科生毕业论文写作全解析

深度测评8个AI论文工具:本科生毕业论文写作全解析 2026年AI论文工具测评:为何需要一份精准指南 随着人工智能技术的不断进步,越来越多的本科生开始依赖AI论文工具来提升写作效率和质量。然而,面对市场上琳琅满目的选择&#xff0c…

如何用云服务器搭建PUBG服务器?

云服务器搭建PUBG服务器完整指南一、服务器配置要求硬件配置推荐根据PUBG游戏的性能需求,建议选择以下配置:最低配置:CPU:Intel Core i5-4430 / AMD FX-6300内存:8GB RAM存储:50GB可用空间(推荐…

租赁Anritsu MT8852B蓝牙测试仪

收到!👍 我来帮你梳理 Anritsu MT8852B蓝牙测试仪 的核心参数与典型应用场景,接下来会从功能、支持标准到实际用途全面展开。 该设备支持蓝牙BR/EDR/BLE多种模式的射频与音频测试,并兼容最新蓝牙5.x标准,广泛用于研发验…

Excel VBA 编程基础学习笔记 · 第六章:字典技术 - 掌握高级数据映射与处理的王牌工具

目录 第6章:VBA与字典技术 1、字典技术的魅力 2、字典语法基础 3、字典实例(第1次与最后一次采购价提取) 4、字典实例(多表求不重复值) 5、字典实例(字典与数组经典结合) 6、字典实例(分类计算) 7、字典应用(多列合并计算…

大模型产业价值链深度解析:从基础设施到应用层的全景指南

大模型产业呈现四层价值链架构,当前超60%价值集中于基础设施层,未来将向MaaS服务及应用层传递。应用层分为软件平台(轻量化高毛利)和硬件载体(重投资长周期)。大模型厂商可选择开源、闭源或混合策略。基础设施层整合IDC承载、硬件算力、系统集成及软件调…

Excel VBA 编程基础学习笔记 · 第四章:事件编程 - 打造智能交互的自动化引擎

目录 第四课:Excel VBA事件过程 1、EXCEL事件程序定义与作用 2、事件程序基础 3、工作表事件实例1(自选计算与投票统计) 4、工作表事件实例2(状态栏地址与防工作表名更改) 5、工作表事件实例3(自动列出工作表名与…

【MIMO通信】MIMO检测器(ZF、MMSE、SIC、ML)在瑞利衰落下的BER性能比较【含Matlab源码 14929期】含报告

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…

BUUCTF-[ACTF2020 新生赛]Upload

打开靶机后发现是一个文件上传的题目随便上传一个文件观察路径和返回的方式是什么发现只能上传jpg,png,gif的文件上传一个jpg文件发现页面会回显返回的路径既然有路径了我们就可以尝试上传一句话木马了构造一句话木马<?phpeval($_POST[rc]);?>导入字典观察过滤的哪些后…

幂等性设计指南:从数据库唯一索引到 Redis Token,如何防止用户“手抖”重复提交?

标签: #架构设计 #幂等性 #Redis #数据库 #分布式系统 #面试必问 💣 前言:即使前端置灰了按钮,后端也必须防重 很多初级开发者认为:“我在前端点击按钮后,把按钮置灰(Disabled)不就行了吗?” 太天真。 懂点技术的用户可以直接调 API 接口。 弱网环境下,请求发出去了…

发刊不用愁:paperxie 期刊论文功能,一键匹配普通刊 / 核心刊的学术标准

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippt https://www.paperxie.cn/ai/journalArticleshttps://www.paperxie.cn/ai/journalArticles 对于科研人员和学生来说&#xff0c;“期刊论文投稿” 从来不是 “写完文字” 这么简单 —— 普通刊要符…

PointMAE的代码配环境+运行

PointMAE的笔记 PointMAE的代码地址 1. 环境配置 我的cuda是115安装Pointnet2_PyTorch总是失败 所以我在隔离环境中创建了cuda113的环境 参考pip 隔离环境内 安装 cuda 113 不覆盖原有的全局 cuda 115 1.1 安装torch pip install torch1.12.1cu113 torchvision0.13.1cu113…