透过现象看本质,图解支持向量机

告别老旧内核!手把手教你为Android 10设备手动更新WebView(以升级至97版为例) 本文详细指导如何在Android 10设备上手动更新WebView至97版,解决老旧内核导致的兼容性、性能和安全问题。通过ADB命令和图形化操作两种方案,无需Root即可完成升级,显著提升网页加载速度和安全性。 阅读详情

选自towardsdatascience

作者:Rohit Pandey

机器之心编译

作者说:我以前一直没有真正理解支持向量机,直到我画了一张图。

1. 问题

支持向量机(SVM)旨在解决「分类」问题。数据通常包含一定数量的条目/行/点。现在,我们想对每个数据点进行分类。为简单起见,我们假设两个类别:「正类」和「负类」。这或许可以帮助解答以下问题:

  • 基于图像的像素数据,判断这张图像中是否有猫(有猫则标签为正类);

  • 基于邮件的主题、发送者、文本等,判断该邮件是否为垃圾邮件;

  • 判断某个病人是否患有某种疾病。

其精髓在于,当我们知道正确答案时,我们会想到一些将数据分为两类的规则(对于支持向量机而言,「规则」是画一个平面,一侧的所有点均为「正」,另一侧的所有点均为「负」)。当我们遇到不知道类别的新数据点时,我们使用规则对其进行分类。分类问题严重依赖约束优化,同时也是约束优化的一个直观示例。大家可以参考以下博客或吴恩达的文章。

  • 博客地址:https://towardsdatascience.com/lagrange-multipliers-with-pictures-and-code-ace8018dac5e

  • 吴恩达文章地址:http://cs229.stanford.edu/notes/cs229-notes3.pdf

1.1 图解

我以前一直没有真正理解支持向量机,直到我画了一张图。

我们可以看到特征空间中有一些点。为方便可视化,我们使用一个可在屏幕上观看的 2D 特征空间。该空间中散落着一些数据点,每个点具备二元标签((1/-1)。如下图所示,我们将绿色点看作正类,红色点看作负类,黄色点类别未知。如果让你猜测黄色点的标签,你会怎么选?你可能会发现其中一些点并不是那么容易确认类别。

图 1:2-D 分类问题。绿色点是正类,红色点是负类。你可以猜出黄色点的标签吗?(绘图工具:https://github.com/ryu577/pyray)

现在,如果我画一条紫色线将两个类别分割开,那么黄色点属于哪个类别就清晰多了(紫色线上方是绿色点,下方是红色点)。

图 2:画一条线,作为将正类标签和负类标签分割开来的「规则」。现在,我们可以使用该规则标注每个黄色点的类别。

然而,这条线并非唯一。有很多条紫色线可以将绿色点和红色点完美分割(见下图)。随着下图中紫色线的移动,某些黄色点就显得很微妙了(它们处于紫色线的不同侧,因此它们的类别取决于你选择使用哪条紫色线)。

图 3:将红色点和绿色点完美分割的线有很多条。那么我们应该选择哪一条呢?

问题在于,所有候选线中,哪一条是「最优」的?有一点很清楚:当上图中的紫色线接近右下角的红色点(critical point)时,其泛化效果不好,而当它远离那个点时,其分割效果要好得多。因此,这个红色点可以说明紫色线的分类效果,因此它是「关键点」。我们可以说,远离该红色点的线同样远离所有训练样本,而靠近该红色点的线最终的分类效果并不好。因此,离最近的训练样本较远的线才是优秀的分类器。

接下来,我们来看如何利用数学知识绘制分割线。

2. 绘制分割线

现在我们要(在 2D 空间中)画一条分割线(在更高维度的空间中,则为分割面)。那么这条线是什么呢?它是具备某种共性的点的无限集合。这些点满足一个特定公式。为了找到这个公式,我们先从最简单的线 x 轴开始。x 轴上所有点的位置向量存在什么共性?v_x = [x,0],即它们对应的 y 坐标均为 0。

也就是说,x 轴上每个点的位置向量与指向 y 轴方向的向量是正交(垂直)的。

这个说法可能看起来比较晦涩难懂,但是我们必须这么说,因为这种现象其实对所有线都成立,而并非只适用于 x 轴。我们希望将此说法泛化至任意线。现在每次挪动一小步,我们来看看穿过原点的线(如 x 轴)。如下图所示,只需将 x 轴旋转一定角度,就可以得到这些线。

图 4:旋转 x 轴可以得到穿过原点的任意线。这些线上的每个点都与橙色向量相垂直。

随着线的变化,与线相垂直的向量也在变化,但是所有线上每个点的位置向量都与某个向量垂直。我们把这个与线垂直的向量叫做 w。当我们改变 w 时,就可以捕捉到所有此类线。

注意,对于任意给定线而言,存在多个 w 值。如果我们将向量 w 扩展或缩小一定数值,该线上每个点的位置向量仍与向量 w 垂直。

图 5:扩大或缩小正交 w 向量。

为什么不把 w 向量限制在大小为 1 呢?下文中,我们将 w 向量的大小设为 1。

现在我们已经将穿过原点的所有线都参数化了。那么那些没有穿过原点的线呢?我们将穿过原点的线移动一定量,即在该线法向量 w 的方向上移动 b。现在,w 与该线上每个点的位置向量的点积不为零,而是常量 b(参见下图)。w 向量是从原点指向紫色线的单位向量,且与紫色线垂直。A 即紫色线上与原点最接近的点。假设 OA 的距离是 -b。现在,考虑两个随机点 B 和 C(分别是图中绿色点和橙色点)。将 OB 或 OC 与单位向量 w 相乘,分别得到三角形 OAB 和 OAC 的底。

在这两种情况中,OA 为 -b。由于这两个点只是紫色线上的任意点,我们可以推断出,紫色线上的所有点均满足 w^T x+b=0(其中 x 表示紫色线上点的位置向量)。

图 6:未穿过原点的线。

如果我们将不在该线上的点应用于上述公式呢?得到的结果不是零,而是从该点到紫色线的垂直距离(对于紫色线上的点而言也是如此,所以它们所对应的公式结果为零)。我们需要注意:这个结论仅适用于 |w|=1 的情况。下图清晰说明了这一结果。B 为不属于紫色线的任意点,B』』 为从 B 到紫色线的垂点,B』 为从 B 到 w 向量的垂点。从 B 到紫色线的垂直距离为 BB』』。但是由于 A-B』-B-B』』 是一个矩形,因此该垂直距离等于 AB』=OB』-OA。现在,OB』 是 B 的位置向量与 w 的点积。因此,如果 x 是 B 的位置向量,则 |OB』| = w^T x。这意味着 |AB』|=w^T x-(-b)(OA=-b)。因此从点 B 到紫色线的距离是:|AB』|=w^T x+b(该公式恰好是紫色线的公式)。

图 7:将不在紫色线上的点应用于紫色线公式会发生什么?我们得到该点与紫色线之间的垂直距离。

注意,在 w 指向方向一侧的所有点(如图 7 中的点 B)到紫色线的垂直距离为正值,而另一侧点的垂直距离为负值。

在 w 指向方向一侧的所有点均得到正类标签 (t_i=1),而另一侧的所有点均得到负类标签 (t_i=-1)。因此,如果我们将这些标签与垂直距离相乘,则所有点调整后的垂直距离均为正,前提是这些点均被紫色线正确分类(即具备正类标签的点在线一侧,具备负类标签的点在另一侧)。

3. 最佳分割线

现在到了 SVM 的重点了。我们将任意点到分割线的调整后垂直距离叫做「间距」(margin)。那么,对于任意给定分割线,所有点均具备间距(如果点被分割线正确分类,则间距为正,反之则间距为负)。我们想获取将正类和负类完美分割的线。也就是说,间距越大越好,即使是对于邻近界限(分割平面)的点。

那么,最大化所有间距(甚至是最接近分割线的点的间距)的分割平面应该能够很好地分割这些点。现在,给出 (w,b),第 i 个点的间距为:

间距公式。

其中 x_i 表示特征空间中的位置向量,t_i 表示标签:1 为正类,-1 为负类。

所有点中的最小间距为:

公式 1:所有点中的最小间距。

我们想让 (w,b) 最大化上述最小间距。也就是:

即我们想让 (w,b) 满足 |w|=1,且最大化间距:

公式 2:SVM 目标函数。

注意:如果这条线没有分离数据,那么对于 (w,b),某些点的间距

间距公式。

为负。且这些点中的其中一个会在第一次最小化中「脱颖而出」,这意味着 (w,b) 无法在第二次 arg max 时胜出。因此,该公式保证了胜出的 (w,b) 能够分割数据。

公式 2 是一个优化问题,涉及最小化和最大化(mini-max)。解决一级优化总比二级优化要简单。因此,我们尝试将公式 2 转化为约束优化问题。

我们用 γ 表示所有点的最小间距。

公式 3:约束。

最终得到的优化问题为:

公式 4:SVM 优化问题。

上述优化问题具备二次/线性约束和线性目标函数。我们可以使用二次规划求解器(quadratic programming solver)和最优分割线/平面 (w,b) 解决该问题。

现在,我们来试着进一步简化该问题。我们发现可以去除 γ。其代价是,我们必须放弃 w^T w = 1 这一要求。但这是值得的。我们使用 γ 将约束分割为两部分,得到:

公式 5:使用 γ 分割分割平面公式。

现在,使

引入新的 w 变量。

为两侧取绝对值:

取绝对值。

我们之前要求 |w|=1。这意味着:

因此,公式 3 变成了:

公式 5 和公式 6 使公式 4 中的优化问题变成了:

现在,优化问题有了一个丑陋的目标函数。但是最大化 1/|w| 等同于最小化 |w|,等同于最小化 |w|²。添加 1/2 使得计算更加简单。

因此,上述优化问题变为:

公式 7

现在,该优化问题具备二次目标函数和线性约束(线性约束二次规划,LCQP)。使用二次规划求解器即可解决该问题。

现在,我们知道如何通过解决优化问题找出最优分割线了。透过表面查看解决这类优化问题的真正机制,会帮助我们对该问题了解更多,具备更强大的洞察和见解。

欢迎扫码关注:

手把手教你学simulink(8.39)--基于Simulink的步进电机(Stepper Motor)仿真实例 通过这个仿真实例,你可以学习如何使用Simulink构建和仿真步进电机(Stepper Motor)系统。你可以根据实际需求调整模型和参数,进行更复杂的仿真和分析。希望这个例子对你有所帮助,祝你学习愉快! 阅读详情

相关推荐

银河麒麟系统V10 Server SP1 安装Oracle 19c

•oracle-database-preinstall-19c 这个工具会自动配置系统参数,创建 oracle 用户和组。比较方便。•••••银河麒麟高级服务器操作系统V10 - 国产操作系统、银河麒麟、中标麒麟、开放麒麟、星光麒麟——麒麟软件官方网站。

fuguimashu的博客 4325

瞎聊机器学习——全方位理解支持向量机(SVM)

SVM是一种常用的二分类模型,同时我们也可以通过核技巧用它来解决一些多分类的问题,下面我们来仔细的研究一下这个神秘的模型。 一、线性可分问题 线性可分,顾名思义就是可以用一条直线能够将两个不同的种类分开的问题。我们当然可以这么去理解,但是线性不可分的问题你是否能够很快的想到一个好的例子呢?下面我们来仔细的说一下这个问题。 用上图来作为一个简单的例子,图中有三角和圆两个类别,我们想找...

二哥为啥不像程序员? 1215

在ZYNQMP上点亮800x480 LCD屏:从framebuffer到DRM框架的完整驱动移植实战

本文详细介绍了在ZYNQMP平台上点亮800x480 LCD屏的完整驱动移植实战,从framebuffer到DRM框架的技术实现。内容涵盖硬件配置、设备树设置、显示时序参数调试以及DRM驱动核心实现,帮助开发者快速掌握PetaLinux系统中的LCD驱动开发技巧。

weixin_33701294的博客 428

(四)支持向量机(SVM)

如图所示为蓝红两类样本,SVM的工作就是找到一个超平面,可以使得这两类样本更好的分开,图中所示的红线就是SVM所求得的超平面,图中的虚线与超平面平行,d表示两类样本到超平面的距离,我们的目的就是最小化W。如下图所示,蓝色样本的y(类别标签)为-1,红色样本的y(类别标签)为1,对两个虚线方程进行一定的变换(如下图所示),则得到。上述我们所讲的题目都是可以直接用一条直线区分开,但是还有一些分类问题无法用直线区分开,如下图中的左图,圆内是一类,圆外是一类。对L求解w和b的梯度,求得L取最小值时的条件。.....

Billie使劲学的博客 1517

机器人视觉实战:用OpenCV搞定手眼标定(附完整C++代码)

本文详细介绍了使用OpenCV实现机器人视觉中的手眼标定技术,包括核心算法、工业场景优化及完整C++代码示例。通过解析坐标系转换问题,提供从数据采集到标定验证的全流程解决方案,帮助开发者在复杂工业环境中实现高精度机械臂与视觉系统的协同作业。

weixin_29306571的博客 483

labview汽车电子通用测试程序架构,CAN通讯上位机

结合做过的汽车电子测试项目,车身控制器测试,CAN网络模块测试,电机控制器功能测试,汽车仪表盘视觉及功能测试、电气盒功能测试、EOL下线检测、车用空调控制器功能测试等项目,结合实际项目,整理编写的一个汽车电子,通用测试架构,包含项目的讲解等。6、数据保存 、数据处理、 曲线显示 、报警处理等。7、CAN总线故障信息监控及记录保存。2、参数设置(CAN端口及参数)5、CAN通讯+数据解析。

ali2805486883的博客 2763

《机器学习》学习笔记(六)——支持向量机(SVM)

机器学习(Machine Learning)是一门多学科交叉专业,涵盖概率论知识,统计学知识以及复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式, 并将现有内容进行知识结构划分来有效提高学习效率。本专栏将以学习笔记形式对《机器学习》的重点基础知识进行总结整理,欢迎大家一起学习交流!专栏链接:《机器学习》学习笔记 1. 概述 支持向量机(support vector mac...

闭关修炼——暂退 7917

DataGridView 右键菜单复制(公共)

dataGridView1.CellMouseClick += new DataGridViewCellMouseEventHandler( (sender1, e1) => { if (e1.Button == MouseButtons.Right) {

沁心渃水 2834

支持向量机SVM原理解析

支持向量机(SVM) 可以找到这样一个超平面,使得所有相同类别的样本位于超平面一侧。如图示,可能存在无穷多个超平面。虽然他们的训练误差都等于0,但不能保证这些超平面在测...

轩逸云的博客 8527

5.3 磁悬浮轴承:基于有限元法的电磁场分析

摘要:本文系统阐述了有限元法在磁悬浮轴承电磁场分析中的应用。相较于等效磁路法和解析法,有限元法能精确处理复杂几何、材料非线性和动态效应。重点介绍了三维静磁场仿真(用于计算稳态磁场、电磁力和电感)和瞬态磁场仿真(用于分析动态过程和损耗)的关键设置与后处理方法。通过有限元分析可验证承载力、评估损耗分布并指导结构优化,形成"磁路设计-有限元验证-参数修正"的闭环设计流程,为磁轴承的精确设计和性能评估提供可靠依据。

技术工作者 1298

筑牢上线前安全防线:安全运维服务中的检测实践与深化

在日益严峻的网络安全形势下,将漏洞扫描、渗透测试和基线核查有机结合的上线前安全检测,是保障信息系统安全、稳定、合规上线的基石。通过专业、严谨、协作的检测实践,乙方安全团队能够有效协助甲方在系统生命周期的起点就构筑起坚固的安全防线,为业务的顺利开展和用户的信任保驾护航,真正实现“安全赋能业务”的价值。这道“守门人”的职责,是数字时代企业稳健前行的不可或缺的保障。专业的安全服务提供商(乙方)需要与甲方(系统所有者/运营方)建立紧密、透明、协作的伙伴关系,实现风险的闭环管理,甚至推动甲方安全能力的长期提升。

huluang的专栏 185

透过现象看本质,图解支持向量机!

选自towardsdatascience作者:Rohit Pandey机器之心编译作者说:我以前一直没有真正理解支持向量机,直到我画了一张图。1. 问题支持向量机(SVM)旨在解决「分类...

lsxxx2011的专栏 193

基于XDMA 的PCIE读写DDR

基于XDMA 的PCIE读写DDR 概述:   想实现基于FPGA的PCIe通信,查阅互联网各种转载…基本都是对PCIe的描述,所以想写一下基于XDMA的PCIe通信的实现(PCIe结构仅做简单的描述(笔记),了解详细结构移至互联网)。 实现功能:PC通过PCIE读写DDR,同时用户通过逻辑代码可以读取被写入DDR内的数据(我是通过VIO实现DDR任意地址,任意数据大小的读取。)。 实践实践!!! 说明: 参考文档: PCI Express Base Specification Revision 3.0 P

Crazzy_M的博客 1万+

收藏、点赞、退出一气呵成,2019年机器学习干货教程都在这里了

机器之心整理参与:张倩、蛋酱从 2016 年起,机器之心每年都会盘点全年的精华教程。去年就有小伙伴留言说要在 2019 年上半年把 2018 年的教程合集「啃下来」。现在都 2020 了...

fengdu78的博客 3846

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

收藏、学习一气呵成,2019年机器之心干货教程都在这里了

机器之心整理参与:张倩、蛋酱从 2016 年起,机器之心每年都会盘点全年的精华教程。去年就有小伙伴留言说要在 2019 年上半年把 2018 年的教程合集「啃下来」。现在都 2020 了...

Datawhale 2360

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

收藏、退出一气呵成,2019年机器之心干货教程都在这里了

机器之心整理参与:张倩、蛋酱从 2016 年起,机器之心每年都会盘点全年的精华教程。去年就有小伙伴留言说要在 2019 年上半年把 2018 年的教程合集「啃下来」。现在都 2020 了...

Pysamlam的博客 1791

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

机器学习之支持向量机(SVM)

支持向量机(support vector machine,SVM)是有监督学习中最有影响力的机器学习算法之一,该算法的诞生可追溯至上世纪 60 年代, 前苏联学者 Vapnik 在解决模式识别问题时提出这种算法模型,此后经过几十年的发展直至 1995 年, SVM 算法才真正的完善起来,其典型应用是解决手写字符识别问题。SVM 是一种非常优雅的算法,有着非常完善的数学理论基础,其预测效果,在众多机器学习模型中“出类拔萃”。在深度学习没有普及之前,“支持向量机”可以称的上是传统机器学习中的“霸主”。

十年以上架构设计经验,专注于软件架构和人工智能领域,对机器视觉、NLP、音视频等领域都有涉猎 4万+

深度学习第四课——SVM(支持向量机)

支持向量机(support vector machines, SVM)也是一种分类模型,与KNN类似,两者都是比较经典的机器学习分类算法,KNN是通过选取目标点的临近值判断目标点的值,而SVM则是通过划分区域,从而判断目标点属于哪部分。SVM算法较KNN更复杂,但是能适应更多种情况,在处理大量数据时,进行运算比KNN算法少,更有效,而当数据量小时,用KNN更简便。

weixin_51943818的博客 4205

支持向量机(SVM)图文详解

支持向量机(SVM)图文详解1.引言2.寻找最优超平面 在看过很多大佬的博客,知乎还有两本机器学习的书籍后总结出的关于支持向量机(SVM)的相关知识,大一学生第一次发博客,请多多指教。 1.引言 什么是SVM?我们要用SVM干嘛? 我们先看下面这个问题:用一个小木棍分割不同种类的小球,那么要如何去分呢? 现在有A,B完成了这项任务(如下图) 那么问题来了,如何判断哪种分割方法更好呢? 由上图...

qq_42796587的博客 3135

【AI绘图学习笔记】支持向量机和核函数

支持向量机原理(一) 线性支持向量机如上图所示,图中有很多离散点,中间的那条线在之前的二分问题中我们称为分类边界zzz,在支持向量机中它是一个分离二元类别的超平面。假设我们想要判断某些点应当属于那一类,我们希望所有的点都被准确分类。但是实际上离超平面很远的点已经被正确分类,它们的距离太远以至于很难被误分类,我们关心的是那些离超平面距离较近的那些点,也就是虚线范围内的那些点,对于这些点的分类是可能产生误差的。

milu_ELK的博客 656

机器学习算法(二)---支持向量机SVM

支持向量机是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题求解。 非线性问题:SVM的处理方法是选择一个核函数,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。 ...

u012121721的博客 4192
上一篇: 有必要将所有机器学习算法都实现一遍吗?
下一篇: 数据科学家应该知道的3个距离概念
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值