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

发布时间:2026/9/25 19:13:25

【老计带你懂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说明以上为官方公开文档地址可能随版本调整如打不开可用标题搜索。
延伸阅读

更多相关文章

2026/9/25 19:13:25

网络仿真:给网络AI一个可实践、可验证的安全沙盘

为什么我们要做网络仿真:给网络 AI 一个可实践、可验证的环境大约两年前,我在一次内部技术评审会上被问到这样一个问题:我们的 AI 模型在实验室里跑得好好的,为什么迟迟不敢放到现网?当时我的回答是:因为没…

2026/9/25 19:13:25

Oracle汉字转拼音PL/SQL包:UTF8字符集支持与编译调用实战

简介:这是一款面向Oracle数据库开发与运维人员的汉字转拼音PL/SQL工具包,专门解决在UTF8编码环境下将汉字转换为拼音、首字母的文本处理需求,适用于数据分析、拼音索引构建及多语言文本检索等场景。压缩包内仅含1个SQL脚本文件,即…

2026/9/25 19:58:27

怎么远程访问另一台电脑 电脑远程操作电脑怎么做

职场办公、设备运维的时候,经常有远程访问另一台电脑的需求,但不少电脑远控工具设置繁琐、体验拉胯。怎么远程访问另一台电脑更省心稳定,且兼顾画质与安全呢?推荐使用无界趣连2.0,它是适配电脑互控场景的优质工具&…

2026/9/25 19:58:27

一人公司如何用智能体落地六个离钱近的方向

1. 从“一人公司”说起:为什么智能体突然成了离钱最近的杠杆这两年“一人公司”这个词被反复提起,但真正让它从概念变成可执行方案的,是智能体(Agent)这波技术落地。我身边已经有不少朋友,一个人加几个智能…

2026/9/25 19:58:27

家长怎么控制孩子另一个手机 家长怎么远程控制孩子手机

家长怎么控制孩子另一个手机?孩子使用手机时,家长有时需要远程查看设备状态、协助处理问题,或者在孩子遇到操作困难时及时帮忙。家长怎么控制孩子另一个手机?如果不想频繁拿过孩子的手机操作,可以尝试无界趣连2.0&…

2026/9/25 19:53:27

清华唐杰大模型课程改革:从理论到全链路实操项目

1. 这门课到底在教什么:从“听讲座”到“交作业”的转变唐杰老师在清华开课不算新闻,但这次把课程内容整个翻新,让学生直接上手跑通大模型全链路,这件事值得细说。我翻了一圈流出的课程大纲和学生的零散反馈,核心变化就…

2026/9/24 20:24:47

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/25 18:41:36

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑