专栏首页数据分析1480手把手教你如何由浅入深地理解线性SVM模型

手把手教你如何由浅入深地理解线性SVM模型

01

SMV的思想

SVM模型的核心是构造一个“超平面”,并利用“超平面”将不同类别的数据做划分。问题是“超平面”该如何构造,并且如何从无数多个分割面中挑选出最佳的“超平面”,只有当这些问题解决了,SVM模型才能够起到理想的分类效果。

为了直观展现,接下来将以二维数据为例,讨论一个线性可分的例子,进而使读者理解SVM模型背后的理论思想。

如下图所示,两个类别的样本点之间存在很明显的区分度,完全可以通过直线将其分割开来。例如,图中绘制了两条分割直线,利用这两条直线,可以方便地将样本点所属的类别判断出来。虽然从直观上来看这两条分割线都没有问题,但是哪一条直线的分类效果更佳呢(训练样本点的分类效果一致,并不代表测试样本点的分类效果也一样)?甚至于在直线

之间还存在无数多个分割直线,那么在这么多的分割线中是否存在一条最优的“超平面”呢?

进一步,可以对照下图理解如何选择最优“超平面”。假设直线

之间的某条直线,它同样可以将两类样本点准确无误地划分出来。为了能够寻找到最优的分割面

,需要做三件事,首先计算两个类别中的样本点到直线

的距离;然后从两组距离中各挑选出一个最短的(如图中所示的距离

,继续比较

,再选出最短的距离(如图中的

),并以该距离构造“分割带”(如图中经平移后的两条虚线);最后利用无穷多个分割直线

,构造无穷多个“分割带”,并从这些“分割带”中挑选出带宽最大的

这里需要解释的是,为什么要构造每一个分割线所对应的“分割带”。可以想象的是,“分割带”代表了模型划分样本点的能力或可信度,“分割带”越宽,说明模型能够将样本点划分得越清晰,进而保证模型泛化能力越强,分类的可信度越高;反之,“分割带”越窄,说明模型的准确率越容易受到异常点的影响,进而理解为模型的预测能力越弱,分类的可信度越低。对于“分割带”的理解,可以对比下图所示的两幅图形。

上图中,左图的带宽明显要比右图宽很多,对于图中的异常五角星而言,左图既可以准确地识别出它所属的类别,但是右图就会识别错误。所以验证了关于“分割带”的说明,即分割线对应的“分割带”越宽越好,SVM模型就是在努力寻找这个最宽的“带”。

02

SVM的目标函数

根据如上的解释过程,可以将SVM模型的思想表达为一个数学公式,即SVM模型的目标函数为:

其中,

表示样本点i到某条固定分割面的距离;

表示所有样本点与某个分割面之间距离的最小值;

表示从所有的分割面中寻找“分割带”最宽的“超平面”;其中w和b代表线性分割面的参数。假设线性分割面表示为

,则点到分割面的距离

可以表示为:

其中,‖w‖表示 w向量的二范式,即

。很显然,上面的目标函数

其实是无法求解的,因为对于上述的线性可分问题而言,可以得到无穷多个w和b,进而无法通过穷举的方式得到最优的w和b值。为了能够解决这个问题,需要换个角度求解目标函数

,接下来的内容中将会介绍有关线性可分的SVM的目标函数。

03

线性可分SVM模型

以二分类问题为例,假设某条分割面可以将正负样本点区分开来,并且该分割面用

表示。如果样本点落在分割面的左半边,则表示负例,反之表示正例,呈现的图形如下图所示

不妨将五角星所代表的正例样本用1表示,将实心圆所代表的负例样本用-1表示;图中的实体加粗直线表示某条分割面;两条虚线分别表示因变量y取值为+1和-1时的情况,它们与分割面平行。从图中可知,不管是五角星代表的样本点,还是实心圆代表的样本点,这些点均落在两条虚线以及虚线之外,则说明这些点带入到方程

所得的绝对值一定大于等于1。进而可以说明如果点对应的取值越小于-1,该样本为负例的可能性越高;点对应的取值越大于+1,样本为正例的可能性越高。所以,根据如上的图形就可以引申出函数间隔的概念,即数学表达式为:

其中,

表示样本点所属的类别,用+1和-1表示。当

计算的值小于等于-1时,根据分割面可以将样本点

对应的

预测为-1;当

计算的值大于等于+1时,分割面会将样本点

对应的

预测为+1。故利用如上的乘积公式可以得到线性可分的SVM所对应的函数间隔满足

的条件。

直接将函数间隔利用到目标函数

中会存在一个弊端,即当分割面中的参数w和b同比例增加时,所对应的

值也会同比例增加,但这样的增加对分割面

来说却丝毫没有影响。例如,将w和b同比例增加1.5倍,得到的

值也会被扩大1.5倍,而分割面

是没有变化的。所以,为了避免这样的问题,需要对函数间隔做约束,例如单位化处理,进而函数间隔可以重新表示为:

巧妙的是,将函数间隔做单位化处理后,得到的

值其实就是点到分割面的距离,所以

被称为几何间隔。有了几何间隔这个概念,再来看目标函数

正如前文所提,线性可分的SVM所对应的函数间隔满足

的条件,故就等于1。所以,可以将目标函数

等价为如下的表达式:

由于最大化

与最小化

是等价的,故可以将上面的表达式重新表示为:

现在的问题是如何根据不等式的约束,求解目标函数

的最小值,关于这类凸二次规划问题的求解需要使用到拉格朗日乘子法(高等数学或《从零开始学Python数据分析与挖掘》书中有详细说明,这里便不再赘述)。

基于拉格朗日乘子法的数学知识,就可以将线性可分SVM模型的目标函数重新表示为:

所以,第一步要做的就是求解拉格朗日函数的极小值,即

。关于这部分的求解就需要对函数

中的参数和分别求偏导,并令导函数为0:

将如上两个导函数为0的等式重新带入目标函数

中,具体的推导过程如下:

所以,最终可以将最原始的目标函数重新改写为下方的等价目标问题:

其中,

表示两个样本点的内积。如上就是关于线性可分SVM目标函数的构建、演变与推导的全过程了,最终根据已知样本点

计算

的极小值,并利用拉格朗日乘子

的值计算分割面

的参数w和b:

其中,在计算

时,需要固定某个

,即从多个拉格朗日乘子

中任意挑选一个大于0的

样本与后面的和式相减。

04

一个手工计算的案例

为了方便读者理解线性可分SVM模型是如何运作和计算的,接下来举一个简单的例子(案例来源于李航老师的《统计学习方法》一书),并通过手动方式对其计算。

如下图所示,假设样本空间中的三个点可以通过线性可分的SVM进行分类,不妨用实心圆点代表负例、五角星代表正例。如何利用前面介绍的理论知识找到最佳的“超平面”呢?计算过程如下:

第一步:将样本点带入目标函数

第二步:将

带入上式

第三步:对

求偏导,并令导函数为0

经计算可知,

,很显然

并不满足

的条件,目标函数的最小值就需要在边界处获得,即令其中的

,重新计算使

达到最小的

。当

时,

,对

求偏导,得到

;当

时,

,对

求偏导,得到

。经过对比发现,

时,目标函数最小,故最终确定

最后利用求解参数w和b的计算公式,进一步可以得到分割“超平面”的表达式:

根据如上计算过程,得到参数w和b的估计值,并利用前文介绍的分割“超平面”表达式

进一步得到“超平面”方程:

值得注意的是,对比图中的A、B、C三点和拉格朗日乘子

,当

时,对应的样本点会落在两条虚线之上,否则样本点在“分割带”之外。对于虚线之上的样本点,称之为支持向量,即它们是构成SVM模型的核心点,而其他点对“超平面”w和b的计算没有任何贡献。

有关线性SVM的原理就介绍到这里,除此,近似线性SVM和非线性SVM模型相关知识可以在我的新书《从零开始学Python数据分析与挖掘》中得到详细的答案。

05

结语

OK,如果你有任何问题,欢迎在公众号的留言区域表达你的疑问,下一期我们将分享SVM模型的实战案例。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。

本文分享自微信公众号 - 数据分析1480(lsxxx2011),作者:刘顺祥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 总结100个Pandas中序列的实用函数

    在分享《Pandas模块,我觉得掌握这些就够用了!》后有很多读者朋友给我私信,希望分享一篇关于Pandas模块中序列的各种常有函数的使用。经过一段时间的整理,本...

    1480
  • 用数据说谎How to Lie with Data

    不管是前几年流行的手机安兔兔跑分,还是每年双11各家电商晒成绩——人们大概就像希望自己银行卡上的余额那样——越大越好——对“大”数字总是持乐观态度——数据出品方...

    1480
  • 学Python,从列表推导到zip()函数,这五种技巧应知应会!

    最开始学 Python 时,如果我能掌握这些方法,那么代码看起来会更加优美。在本文中,作者介绍了 5 种方法,也许在入门阶段时,我们还不太了解它们,但在实战中这...

    1480
  • Python基础学习-函数

    一:定义函数: ① 函数是带名字的代码块,用于完成具体的工作。 ② 函数使用关键字def来定义,最后,定义以冒号结尾。 ③ 每个函数后面都应紧跟一个文档字符串,...

    爱吃西瓜的番茄酱
  • 【Java小工匠聊密码学】--非对称加密--DH密钥交换算法

    Diffie-Hellman由Whitfield Diffie和Martin Hellman在1976年公布的一种密钥一致性算法。Diffie-Hellman是...

    Java小工匠
  • 以线虫为模型模拟的神经网络,让机器人无需训练即可自动避开障碍物 | 技术

    镁客网
  • Smobiler 4.4已正式发布!(Smobiler能让你在Visual Studio上开发APP)

    Smobiler 4.4已经正式发布,还不快来看看? 原文地址:https://www.smobiler.com/portal.php?mod=view&aid...

    Amanda.li
  • Smobiler 4.4 更新预告 Part 1(Smobiler能让你在Visual Studio上开发APP)

    在4.4版本中,大家对产品优化的一些建议和意见进行了相应的优化和修复,同时,还新增了一些令人激动的功能和插件。

    Amanda.li
  • 两个程序的爱情故事(续)

    我这个进程和她不在一个机器上, 虽然相距243毫秒,但是这并不是阻碍我们交往的理由, 我每天都通过socket 和她来通信,诉说相思之情。

    聚沙成塔
  • 图片—Markdown极简入门教程(5)

    图像也有两种样式,就像链接一样,它们都以完全相同的方式呈现。链接和图像之间的区别在于,图像的开头带有感叹号(!)。

    硬核编程

扫码关注云+社区

领取腾讯云代金券