首页/新闻资讯/正文详情

【老计带你懂AI算法】05:SVM与KNN,一个死磕最优分界线一个干脆看邻居

发布时间:2026/9/25 19:12:24 来源:云帆数科 栏目:资讯中心
【老计带你懂AI算法】05:SVM与KNN,一个死磕最优分界线一个干脆看邻居
【老计带你懂AI算法】05SVM与KNN一个死磕最优分界线一个干脆看邻居开头两个画风清奇的分类器前面几篇讲的线性回归、树模型思路各有各的主流。这一篇的两位主角思路都挺有个性也都是机器学习课本里的经典面试常客。SVM支持向量机一个完美主义者画分界线不满足于能分开就行非要找那条离两边都尽可能远、最稳当的线。KNNK近邻一个极简主义者懒到根本不学习来了新样本就看它旁边最近的几个邻居是什么类跟着投票。把它俩放一起讲正好是两种极端一个想得很多、追求最优一个啥都不想、直接抄邻居。理解它们能拓宽你对分类到底能怎么做的想象。SVM不止分开还要分得最稳先说SVM。它解决的是分类问题。想象平面上有两类点红的和蓝的能把它们分开的直线有无数条。随便画一条歪歪扭扭刚好擦着边分开的也算分开了但不稳新来一个点稍微偏一点就分错了。SVM的执念是在所有能分开的线里找那条离两边最近的点都尽可能远的线。换句话说它要让分界线两侧留出尽可能宽的隔离带术语叫间隔margin。隔离带越宽分界越稳对新数据的容错就越强。打个比方在两拨人中间划一条界你不会贴着某一拨人的鼻子划而会尽量划在正中间、离两边都远的位置这样谁稍微动一动也不会越界。SVM找的就是这条最公道、最稳当的中间线。而那些恰好压在隔离带边缘、决定了这条线位置的关键点就叫支持向量SVM这名字就来自这里。有意思的是只有这些关键的边缘点决定分界线离得远的大多数点其实不影响结果。这让SVM有种抓主要矛盾的美感。SVM的杀手锏核技巧处理弯曲的边界上面说的是直线分界。可如果两类点根本没法用直线分开呢比如红点在中间围成一圈、蓝点在外面一圈你拿直线怎么都分不开。SVM有个化腐朽为神奇的绝招核技巧kernel trick。它的思路很妙既然在当前这个平面上分不开那就把这些点升维到一个更高维的空间里在高维空间里它们往往就能被一个平面轻松分开了。打个比方桌面上散落着红豆和绿豆红豆围成一圈、绿豆在外围你在桌面二维上无论如何画不出一条线把它们分开。可如果你猛拍一下桌子让豆子都弹到空中升到三维说不定红豆弹得高、绿豆弹得低这时候你水平伸一张纸一个平面就轻松把上下两拨分开了。核技巧干的就是这个拍桌子升维的事而且它用了数学技巧不用真的把坐标算到高维那样计算量爆炸而是巧妙地绕过去所以叫技巧。这个能力让SVM能处理非线性的、弯弯曲曲的分类边界威力大增。常用的核有RBF核高斯核等选不同的核能应对不同形状的边界。这是SVM在深度学习兴起前很长一段时间称霸中小规模分类任务的看家本领。这里还值得多说一句SVM一个反直觉的优点它在特征多、样本少的场景下表现往往特别好。很多模型遇到特征比样本还多的情况比如基因数据几万个基因特征、却只有几百个病人样本会严重过拟合但SVM因为只关心那几个支持向量、又追求最大间隔这种保守的目标反而不容易被高维带偏。这让它在文本分类词很多、生物信息等高维小样本领域一度非常吃香。理解这一点你就明白为什么SVM不是过时的老古董在特定场景它仍有独特价值。KNN懒到极致直接抄邻居再说KNN它的思路和SVM形成鲜明对比简单到让人怀疑这也算算法KNN的做法是它压根不训练、不学习任何模型。来了一个新样本要分类它就在训练数据里找出离这个新样本最近的K个邻居看这K个邻居里哪一类最多就把新样本判成那一类。就这么简单。打个比方你搬到一个新小区想判断这是个高档区还是普通区最直接的办法就是看你左邻右舍最近的几户他们开什么车、什么装修多数是什么样你这片大概就是什么样。近朱者赤近墨者黑KNN信奉的就是这个。这里的K是你定的看最近几个邻居。K3就看最近3个投票K5就看5个。KNN最特别的地方是它懒术语叫惰性学习。别的模型是训练时吭哧吭哧学好一个模型、预测时飞快KNN反过来训练时啥也不干就把数据存着把所有计算都推迟到预测时才做现算新样本和所有训练样本的距离找最近的K个。这个懒带来一个明显的代价预测慢、且吃内存。因为每预测一个新样本都要跟全部训练数据算一遍距离。数据量一大就慢得吃不消。这是KNN最大的短板。KNN还有个更隐蔽、也更值得理解的软肋叫维度灾难。KNN靠距离近不近来判断像不像这在特征少二维三维时很直观。可当特征维度非常高几百上千维时一个诡异的数学现象出现了在高维空间里所有点之间的距离会变得越来越接近最近的邻居和最远的点距离差别没那么大了近邻这个概念就失去了意义。打个比方在一条线上一维你很容易分辨谁离你最近可想象在一个几百维的空间里所有人都不远不近地散在四面八方谁离我最近这个问题就变得模糊不清了。维度一高KNN赖以生存的距离就不可靠了效果直线下降。这个维度灾难不只坑KNN它是所有靠距离度量的方法包括后面要讲的聚类都要面对的普遍难题。应对办法之一就是先用降维比如后面要讲的PCA把维度压下来再用KNN。这也是为什么很多模型要配合使用一个的短板靠另一个来补。输入和输出长什么样SVM输入数值特征注意SVM对特征的量纲敏感通常要先做标准化/归一化否则某个数值特别大的特征会主导距离这是用SVM的一个必做预处理。输出类别也有能出概率的变体。KNN输入数值特征同样对量纲敏感也要先标准化因为它靠算距离量纲不统一距离就失真。输出分类给类别、也能做回归取邻居的平均值。这两个模型都靠距离吃饭所以都有个共同的必修课先把特征标准化。这是新手常忘、然后效果差得莫名其妙的一个坑。上代码SVM和KNN都跑一遍含标准化# 依赖pip install scikit-learnfromsklearn.datasetsimportload_breast_cancerfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerfromsklearn.svmimportSVCfromsklearn.neighborsimportKNeighborsClassifierfromsklearn.pipelineimportmake_pipeline X,yload_breast_cancer(return_X_yTrue)Xtr,Xte,ytr,ytetrain_test_split(X,y,test_size0.3,random_state0)# 关键用Pipeline把标准化和模型串起来保证先归一化再喂给模型# SVM用RBF核处理非线性边界svmmake_pipeline(StandardScaler(),SVC(kernelrbf,C1.0))svm.fit(Xtr,ytr)print(SVM(RBF核) 测试集准确率:,round(svm.score(Xte,yte),3))# KNN看最近5个邻居投票knnmake_pipeline(StandardScaler(),KNeighborsClassifier(n_neighbors5))knn.fit(Xtr,ytr)# KNN的fit其实只是把数据存起来print(KNN(K5) 测试集准确率:,round(knn.score(Xte,yte),3))# 试试不标准化的KNN对比看看差距knn_badKNeighborsClassifier(n_neighbors5)knn_bad.fit(Xtr,ytr)print(KNN(没标准化) 准确率:,round(knn_bad.score(Xte,yte),3))运行输出示例SVM(RBF核) 测试集准确率: 0.977 KNN(K5) 测试集准确率: 0.971 KNN(没标准化) 准确率: 0.930运行你会发现标准化过的KNN明显比没标准化的准。这直观展示了靠距离吃饭的模型必须先标准化这个铁律。SVM同理。关键参数SVMC惩罚系数控制对分错样本的容忍度。C大对错误零容忍、边界贴合训练数据、容易过拟合C小允许一些错误、边界更宽松、更泛化。又是那个拟合与过拟合的权衡。kernel核函数线性核处理线性可分、RBF核处理非线性最常用RBF。KNNK邻居数最关键的参数。K太小比如1容易被个别噪声邻居带偏、过拟合K太大又会把远处不相关的点也算进来、变得迟钝。通常取个适中的奇数奇数是为了投票不平局。优缺点与适用场景SVM优点在中小规模数据上分类效果好、有核技巧能处理非线性、理论优雅。缺点数据量一大就训练慢、对参数和核的选择敏感、要标准化、可解释性一般。适合中小规模、特征维度较高、需要处理非线性边界的分类。KNN优点极简单、无需训练、思路直观、天然支持多分类。缺点预测慢且吃内存数据大就崩、对量纲敏感要标准化、维度高了效果差维度灾难。适合数据量不大、需要一个快速简单基线、或作为教学理解分类的入门。它俩今天在工业界一线用得不如树模型多树模型在表格数据上又准又省心但作为经典思路理解它们对建立机器学习的全局观很有价值面试也常考。补一个实用的选型建议帮你记住什么时候会想起它俩当你的数据是中小规模、特征维度高、还需要处理复杂非线性边界比如文本分类、某些生物医学数据SVM值得一试它在这类场景常有惊喜。当你需要一个极快搭起来、逻辑上谁都能看懂的基线或者做推荐/相似检索这种找最像的任务KNN的看邻居思路很自然其实现在向量数据库做相似检索内核思想就和KNN一脉相承都是在高维空间找最近邻只是用了更高效的索引。当你就是普通的表格数据分类回归、还追求高精度和省心那大概率你最后还是会回到随机森林和XGBoost这也是为什么前面几篇花了更多笔墨在树模型上。这三个建议连起来就是一句话SVM和KNN是有独特价值的专用工具不是万金油知道它们的脾气才能在合适的场景想起用它们。尤其KNN和相似检索、向量数据库的渊源在今天的RAG、推荐系统里还在延续绝不是屠龙之技。小结与承上启下SVM找离两边最远、最稳的分界线最大间隔靠支持向量决定核技巧升维处理非线性。KNN懒到不学习预测时看最近K个邻居投票简单但慢、吃内存。共同必修课都靠距离吃饭必须先标准化特征。到这主流的分类思路线性、树、间隔、近邻都见过了。下一篇我们讲一个用概率来分类的经典模型它简单、快、还是垃圾邮件过滤的老功臣朴素贝叶斯。我们下一篇见。延伸阅读scikit-learn 官方文档支持向量机SVMhttps://scikit-learn.org/stable/modules/svm.htmlscikit-learn 官方文档最近邻KNNhttps://scikit-learn.org/stable/modules/neighbors.html说明以上为官方公开文档地址可能随版本调整如打不开可用标题搜索。

相关推荐

Chunked Prefill 深度调优:平衡首字延迟与生成吞吐的黄金切片步长
Chunked Prefill 深度调优:平衡首字延迟与生成吞吐的黄金切片步长

Chunked Prefill 深度调优:平衡首字延迟与生成吞吐的黄金切片步长在大促长文本多轮对话、智能客服知识库检索(RAG)以及代码辅助等复杂业务场景中,推理集群经常面临一种极端的“负载撕裂”:一方面,大量在线交… · 2026/9/25 19:12:18

如何优雅的使用codex:HarnessMix或许能给你答案
如何优雅的使用codex:HarnessMix或许能给你答案

🚀 Harness Mix:把 17 个 AI 编程智能体装进一个 Codex Desktop,任务还能无缝接力 你是不是也这样:Claude Code 开一个终端、Codex 开一个窗口、Cursor 开一个编辑器……AI 编程工具越装越多,窗口切到手抽筋,上下文复制粘贴到怀疑人生?😩 今天给大家安利… · 2026/9/25 19:12:12

34岁后端工程师转战AI大模型,我的16周学习与求职实战报告(附避坑指南)
34岁后端工程师转战AI大模型,我的16周学习与求职实战报告(附避坑指南)

本文分享一位34岁Java后端工程师转行AI大模型的实战经验。作者经历了求职碰壁后,通过16周系统学习,成功转型并获得薪资提升。文章揭示了转行关键在于将8年Java经验转化为AI领域价值,提供了学习路径、避坑建议及项目实战经验,适合想… · 2026/9/25 19:12:00

企业AI进阶指南:大模型时代,本体建设是“收藏级”基础设施吗?
企业AI进阶指南:大模型时代,本体建设是“收藏级”基础设施吗?

随着大模型能力的增强,企业AI发展重点正从单纯应用转向本体建设。本文阐述了企业AI演进路径,强调本体在复杂业务理解与推理中的关键作用,但指出并非所有企业都需立即投入。通过分析五个本体建设的信号,文章建议企业应先聚焦Agent应… · 2026/9/25 19:41:19

从后端到AI Agent:小白程序员转型必看,收藏这份进阶指南!
从后端到AI Agent:小白程序员转型必看,收藏这份进阶指南!

本文针对被裁后转AI Agent方向的程序员,指出他们往往缺乏真正的能力迁移,忽视了后端开发中超时、重试、降级等基本功。文章建议,后端程序员在转型过程中,应基于原有能力叠加大AI应用能力,重点掌握LLM应用开发、RAG实现… · 2026/9/25 19:41:19

“w”模式是Python文件写入的基础工具,其核心优势是语法简洁、使用门槛低,适合快速实现数据的持久化存储
“w”模式是Python文件写入的基础工具,其核心优势是语法简洁、使用门槛低,适合快速实现数据的持久化存储

在Python编程中,文件操作是连接内存数据与持久化存储的核心桥梁。其中,写入模式“w”(write)作为最基础且高频使用的文件操作模式,是每一位Python开发者必须掌握的核心知识点。本报告将围绕“w”模式的底层原理、语法规… · 2026/9/25 19:41:13

RAG工程优化实战:Chunking、混合检索与Rerank核心策略
RAG工程优化实战:Chunking、混合检索与Rerank核心策略

1. 为什么 RAG 工程优化绕不开 Chunking、混合检索和 RerankRAG 这个词现在已经被说烂了,但真正在生产环境里跑过知识库问答的人都知道,把文档塞进向量库、检索出 Top-K 丢给大模型,这套最朴素的流程在实际业务里几乎不可用。问题出在哪&… · 2026/9/25 19:41:13

事务 Transaction 源码分析:@Transactional 如何控制数据库事务提交与回滚
事务 Transaction 源码分析:@Transactional 如何控制数据库事务提交与回滚

如果这篇文章对你有帮助,欢迎关注我的CSDN账号「来福猿」, 有问题可以在评论区留言,我会一一回复。一、从一个问题说起在 Spring 项目中,我们通常只需要在 Service 方法上添加一个 Transactional 注解,方法执行过程中对… · 2026/9/25 19:41:13

Backtrader 学习笔记:从会写 Python 到能做可信回测(八)
Backtrader 学习笔记:从会写 Python 到能做可信回测(八)

Backtrader 策略实战:从一个想法到一份完整回测 学完基础概念后,最好的练习不是继续背 API,而是完整做一个小策略。 今天用“双均线交叉”演示一遍: 提出规则 → 写代码 → 加入成本 → 分析结果 → 检查问题一、先把策略说成人话… · 2026/9/25 19:41:06

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码