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

用一张图理解SVM的脉络 本文及其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造,自2019年1月出版以来已重印3次。 书的购买链接 书的勘误,优化,源代码资源 导言 SVM在之前的很长一段时间内是性能最好的分类器,它有严密而优美的数学基础作为支撑。在各种机器学 习算法中,它是最不易理解的算法之一,要真正掌握它的原理有一定的难度。在本文中,... 阅读详情

(给机器学习算法与Python学习加星标,提升AI技能)

选自towardsdatascience

作者:Rohit Pandey

编译:机器之心(almosthuman2014)

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

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)。使用二次规划求解器即可解决该问题。

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

欢迎扫码关注:

使用支持向量机SVM进行分类 欢迎关注”生信修炼手册”!SVM, 全称为support vector machines, 翻译过来就是支持向量机。该算法最常见的应用场景就是解决二分类问题,当然也可以用于回归和异常值检... 阅读详情

相关推荐

简单点理解 SVM(支持向量机)

1、SVM简介 支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。可能不好理解,那我们来举个例子吧 根据体重判断小鼠是否肥胖,首先得找到一个阈值,这个阈值怎么找呢?按从小到

qq_56688614的博客 3227

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

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

二哥为啥不像程序员? 1215

支持向量机SVM

在很久很久以前的情人节,大侠要去救他的爱人,但魔鬼和他玩了一个游戏魔鬼早桌子上似乎有规律放了两种颜色的球,说:"你用一根棍分开它们.要求:尽量在放更多球之后,仍然使用."让我们引入一个函数f(x),图像如下图所示.将x的每个值映射到其对应的输出.使得所有蓝点在Y轴的输出更大,而红点在Y轴的输出偏小.此时,我们可以使用一条水平线将数据完美分类。此时,求解当a是什么值时,该值会变得很大,当求出a值,在求解w,b值.此时,就变成了极大极小值问题。

djylovehzt的博客 1507

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

(点击上方快速关注并设置为星标,一起学Python)选自towardsdatascience作者:Rohit Pandey机器之心编译 参与:魔王、张倩作者说:我以前一直没...

zandaoguang的博客 774

MATLAB支持向量机SVM代码实现

本栏目(Machine learning)包括单参数的线性回归、多参数的线性回归、Octave Tutorial、Logistic Regression、Regularization、神经网络、机器学习系统设计、SVM(Support Vector Machines 支持向量机)、聚类、降维、异常检测、大规模机器学习等章节。所有内容均来自Standford公开课machine learning

wenyusuran的专栏 4万+

HMC7044芯片模拟SPI配置

摘要: HMC7044是一款高性能双环路整数N分频抖动衰减器,支持SPI接口配置,适用于高速数据转换器时钟系统。该芯片采用双PLL级联架构,具有14路可配置输出,可满足GSM/LTE基站设计需求。SPI接口采用3线模式(SLEN/SCLK/SDATA),支持24位寄存器读写(13位地址+8位数据)。驱动实现基于Zynq EMIO模拟SPI,提供初始化、数据传输及寄存器配置功能,支持三线制工作模式和多种时钟参数设置。

toonyhe的博客 1099

(四)支持向量机(SVM)

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

Billie使劲学的博客 1517

[漏洞利用]利用五次Shift越权破解win7\win10开机密码

注:第一个学习和接触的Windows漏洞 文章目录本机实验环境前置知识漏洞原理漏洞介绍漏洞验证解决方法基本流程介绍详细步骤截图 本机实验环境 虚拟机:VMware Workstation 14 pro 操作系统:Windows10 前置知识 1、cmd工具路径 c:\windows\system32\cmd,按五次shift默认调用同目录下sethc文件,其路径为“c:\windows\system32\sethc.exe” 2、用户/账户密码存储位置 c:\windows\system32\config\

Y4tacker的博客 2万+

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

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

闭关修炼——暂退 7917

ESP32-S3双模CMSIS-DAP调试器:USB+WiFi无线调试方案

CMSIS-DAP是ARM生态中标准化的嵌入式调试协议接口,广泛用于Keil、IAR、STM32CubeIDE等开发环境。其核心原理是通过SWD/JTAG物理层实现目标芯片寄存器访问、内存读写与断点控制,依赖确定性时序和低延迟通信。传统DAPLink调试器受限于USB线缆束缚,而WiFi-USB-DAPLink项目将完整CMSIS-DAP v2协议栈移植至ESP32-S3平台,同时支持USB CDC直连与WiFi TCP远程通道,兼顾实时性与网络化部署能力。该方案无需主机驱动、兼容主流IDE,并支持多机并发

weixin_31185473的博客 372

Fluent新手避坑:遇到‘Floating point exception’别慌,这7个排查步骤帮你搞定

本文为Fluent新手提供了7个排查'Floating point exception'错误的实用步骤,包括边界条件检查、时间步长优化、求解器配置等关键技巧。通过系统化的诊断流程,帮助用户快速定位并解决CFD仿真中的浮点异常问题,提升计算稳定性。

weixin_42531886的博客 289

支持向量机SVM原理解析

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

轩逸云的博客 8527

AI人工智能领域多模态大模型的数字孪生应用

本文旨在系统性地介绍多模态大模型在数字孪生领域的最新应用进展,探讨其技术原理、实现方法和应用价值。内容范围涵盖从基础概念到前沿技术,从理论分析到实践案例。文章首先介绍多模态大模型和数字孪生的基本概念,然后深入分析两者的结合点,接着通过具体案例展示应用实践,最后探讨未来发展趋势和挑战。多模态大模型:能够同时处理和融合多种数据模态(如文本、图像、视频、音频等)的大型人工智能模型数字孪生:物理实体或系统的虚拟副本,通过实时数据同步实现虚实交互跨模态融合:将不同数据模态的信息进行有效整合和关联的技术。

AI云原生与云计算技术学院 1325

支持向量机SVM Iris数据集 分类预测

支持向量机对iris数据集进行分类预测 1. 基础概念 SVM的主要思想是:建立一个超平面作为决策平面,使得正例和反例之间的隔离边缘被最大化。SVM也是结构风险最小化方法的近似实现。 2. 实验步骤与分析 序号 任务名称 任务具体要求 1 数据理解 理解数据集背景以及数据含义。 2 数据读入 可使用sklearn中自带的i

admin11111111的博客 1万+

社会网络仿真软件:NetLogo_(14).社会网络数据导入与导出

在NetLogo中,社会网络的仿真不仅依赖于模型的内部逻辑,还需要能够灵活地导入和导出数据。这使得用户可以利用外部数据来初始化模型,或者将模型的运行结果导出以便进一步分析。本节将详细介绍如何在NetLogo中实现社会网络数据的导入和导出,包括常见的数据格式和具体的代码示例。

kkchenjj的博客 600

beegfs读取文件完整流程分析

读取小于512KB文件数据,小于1s 读取15MB文件数据,花费7秒。

wfzy的博客 836

支持向量机SVM通俗理解(python代码实现)

这是第三次来“复习”SVM了,第一次是使用SVM包,调用包并尝试调节参数。听闻了“流弊”SVM的算法。第二次学习理论,看了李航的《统计学习方法》以及网上的博客。看完后感觉,满满的公式。。。记不住啊。第三次,也就是这次通过python代码手动来实现SVM,才让我突然对SVM不有畏惧感。希望这里我能通过简单粗暴的文字,能让读者理解到底什么是SVM,这货的算法思想是怎么样的。看之前千万不要畏惧,说到底就...

程松 9万+

【后量子密码】SPHINCS+ 算法(二):签名与验签(附源码分析)

本节介绍SPHINCS+ 算法的密钥生成、签名与验签。nnn:安全参数;www:Winternitz参数,WOTS+签名分解的基底;hhh:超树的高度;ddd:超树中子树的层数;kkk:FORS 树的数量;ttt:FORS 树的叶子节点数。

听雨草堂 4680

SVM支持向量机详解

支持向量机(support vector machines, SVM)是二分类算法,所谓二分类即把具有多个特性(属性)的数据分为两类,目前主流机器学习算法中,神经网络等其他机器学习模型已经能很好完成二分类、多分类,学习和研究SVM,理解SVM背后丰富算法知识,对以后研究其他算法大有裨益;在实现SVM过程中,会综合利用之前介绍的一维搜索、KKT条件、惩罚函数等相关知识。本篇首先通过详解SVM原理,后介绍如何利用python从零实现SVM算法。 为便于理解,假设样本有两个属性,可以把属性值分别对应到二...

m2xgo的博客 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

支持向量机通俗导论(理解SVM的三层境界)

支持向量机通俗导论(理解SVM的三层境界) 作者:July、pluskid ;致谢:白石、JerryLead 出处:结构之法算法之道blog。 前言     动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因很简单,一者这个东西本身就并不好懂,要深入学习和研究下去需花费不少时间和精力,二者这个东西也不好讲清

Mac Track 33万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深入浅出理解SVM支持向量机

SVM是啥? SVM(全称Support Vector Machine)中文名支持向量机, 这里的vector就是数学中那个向量。SVM用到向量,然后它的功能就和它的名字没什么关系了。 SVM用于解决分类问题,何为分类呢?顾名思义,就是把你拥有的数据分成几类。 SVM是有监督学习,我们先给一部分数据打上类别标签,让SVM模型使用这些打了类别标签的数据进行训练,训练后,给训练好的SVM模型新的无类别标签的数据,SVM模型就可以自动对这些新的数据分类。 如图,有一些样本点,现在我们需要对两组..

MengHao的博客 6634

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

快速理解支持向量机实现图像分割(Matlab实现基于SVM的图像分割)

@Matlab实现基于SVM的图像分割 如何通过一篇文章就理解支持向量机实现图像分割 最近是Matlab实验周,我选择的课题是支持向量机实现图像分割,说实话比较让人头大,因为向量机训练的效果不佳,切割出来的图片奇奇怪怪五花八门(甚至还有些搞笑),开始的时候是从优快云上copy的代码直接运行,我觉得选像素点和向量机训练过程有一些问题,查阅资料之后,我对向量机有了新的理解。(文章结尾有能够成功运行的Matlab代码) 查阅资料 先贴一段我从图书馆借来的书上关于SVM的原话:支持向量机的基本思想是:定义最优线性

低调鬼鬼的博客 6657

惊呼——SVM支持向量机三重境界!

转载自:原文 前言     动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因很简单,一者这个东西本身就并不好懂,要深入学习和研究下去需花费不少时间和精力,二者这个东西也不好讲清楚,尽管网上已经有朋友写得不错了(见文末参考链接),但在描述数学公式的时候还是显得不够。得益于同学白石的数学证明,我还是想尝试写一下,希望本文在兼顾通俗易懂的

Yingying 2万+
上一篇: CV 方向,长期看好,短期谨慎?
下一篇: 13个Pandas实用技巧,请收好
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值