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

01

SMV的思想

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

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

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

640?wx_fmt=png

进一步,可以对照下图理解如何选择最优“超平面”。假设直线640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png之间的某条直线,它同样可以将两类样本点准确无误地划分出来。为了能够寻找到最优的分割面640?wx_fmt=png

,需要做三件事,首先计算两个类别中的样本点到直线640?wx_fmt=png的距离;然后从两组距离中各挑选出一个最短的(如图中所示的距离640?wx_fmt=png640?wx_fmt=png,继续比较640?wx_fmt=png640?wx_fmt=png,再选出最短的距离(如图中的640?wx_fmt=png),并以该距离构造“分割带”(如图中经平移后的两条虚线);最后利用无穷多个分割直线640?wx_fmt=png,构造无穷多个“分割带”,并从这些“分割带”中挑选出带宽最大的640?wx_fmt=png

640?wx_fmt=png

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

640?wx_fmt=png

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

02

SVM的目标函数

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

640?wx_fmt=png

其中,640?wx_fmt=png表示样本点i到某条固定分割面的距离;640?wx_fmt=png表示所有样本点与某个分割面之间距离的最小值;640?wx_fmt=png表示从所有的分割面中寻找“分割带”最宽的“超平面”;其中w和b代表线性分割面的参数。假设线性分割面表示为640?wx_fmt=png,则点到分割面的距离640?wx_fmt=png可以表示为:

640?wx_fmt=png

其中,‖w‖表示 w向量的二范式,即640?wx_fmt=png。很显然,上面的目标函数640?wx_fmt=png其实是无法求解的,因为对于上述的线性可分问题而言,可以得到无穷多个w和b,进而无法通过穷举的方式得到最优的w和b值。为了能够解决这个问题,需要换个角度求解目标函数640?wx_fmt=png,接下来的内容中将会介绍有关线性可分的SVM的目标函数。

03

线性可分SVM模型

以二分类问题为例,假设某条分割面可以将正负样本点区分开来,并且该分割面用640?wx_fmt=png表示。如果样本点落在分割面的左半边,则表示负例,反之表示正例,呈现的图形如下图所示

640?wx_fmt=png

不妨将五角星所代表的正例样本用1表示,将实心圆所代表的负例样本用-1表示;图中的实体加粗直线表示某条分割面;两条虚线分别表示因变量y取值为+1和-1时的情况,它们与分割面平行。从图中可知,不管是五角星代表的样本点,还是实心圆代表的样本点,这些点均落在两条虚线以及虚线之外,则说明这些点带入到方程640?wx_fmt=png所得的绝对值一定大于等于1。进而可以说明如果点对应的取值越小于-1,该样本为负例的可能性越高;点对应的取值越大于+1,样本为正例的可能性越高。所以,根据如上的图形就可以引申出函数间隔的概念,即数学表达式为:

640?wx_fmt=png

其中,640?wx_fmt=png表示样本点所属的类别,用+1和-1表示。当640?wx_fmt=png计算的值小于等于-1时,根据分割面可以将样本点640?wx_fmt=png对应的640?wx_fmt=png预测为-1;当640?wx_fmt=png计算的值大于等于+1时,分割面会将样本点640?wx_fmt=png对应的640?wx_fmt=png预测为+1。故利用如上的乘积公式可以得到线性可分的SVM所对应的函数间隔满足640?wx_fmt=png的条件。

直接将函数间隔利用到目标函数640?wx_fmt=png中会存在一个弊端,即当分割面中的参数w和b同比例增加时,所对应的640?wx_fmt=png值也会同比例增加,但这样的增加对分割面640?wx_fmt=png来说却丝毫没有影响。例如,将w和b同比例增加1.5倍,得到的640?wx_fmt=png值也会被扩大1.5倍,而分割面640?wx_fmt=png是没有变化的。所以,为了避免这样的问题,需要对函数间隔做约束,例如单位化处理,进而函数间隔可以重新表示为:

640?wx_fmt=png

巧妙的是,将函数间隔做单位化处理后,得到的640?wx_fmt=png值其实就是点到分割面的距离,所以640?wx_fmt=png被称为几何间隔。有了几何间隔这个概念,再来看目标函数640?wx_fmt=png

640?wx_fmt=png

正如前文所提,线性可分的SVM所对应的函数间隔满足640?wx_fmt=png的条件,故就等于1。所以,可以将目标函数640?wx_fmt=png等价为如下的表达式:

640?wx_fmt=png

由于最大化640?wx_fmt=png与最小化640?wx_fmt=png是等价的,故可以将上面的表达式重新表示为:

640?wx_fmt=png

现在的问题是如何根据不等式的约束,求解目标函数640?wx_fmt=png的最小值,关于这类凸二次规划问题的求解需要使用到拉格朗日乘子法(高等数学或《从零开始学Python数据分析与挖掘》书中有详细说明,这里便不再赘述)。

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

640?wx_fmt=png

所以,第一步要做的就是求解拉格朗日函数的极小值,即640?wx_fmt=png。关于这部分的求解就需要对函数640?wx_fmt=png中的参数和分别求偏导,并令导函数为0:

640?wx_fmt=png

将如上两个导函数为0的等式重新带入目标函数640?wx_fmt=png中,具体的推导过程如下:

640?wx_fmt=png

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

640?wx_fmt=png

其中,640?wx_fmt=png表示两个样本点的内积。如上就是关于线性可分SVM目标函数的构建、演变与推导的全过程了,最终根据已知样本点640?wx_fmt=png计算640?wx_fmt=png的极小值,并利用拉格朗日乘子640?wx_fmt=png的值计算分割面640?wx_fmt=png的参数w和b:

640?wx_fmt=png

其中,在计算640?wx_fmt=png时,需要固定某个640?wx_fmt=png,即从多个拉格朗日乘子640?wx_fmt=png中任意挑选一个大于0的640?wx_fmt=png样本与后面的和式相减。

04

一个手工计算的案例

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

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

640?wx_fmt=png

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

640?wx_fmt=png

第二步:640?wx_fmt=png带入上式

640?wx_fmt=png

第三步:640?wx_fmt=png求偏导,并令导函数为0

640?wx_fmt=png

经计算可知,640?wx_fmt=png,很显然640?wx_fmt=png并不满足640?wx_fmt=png的条件,目标函数的最小值就需要在边界处获得,即令其中的640?wx_fmt=png,重新计算使640?wx_fmt=png达到最小的640?wx_fmt=png。当640?wx_fmt=png时,640?wx_fmt=png,对640?wx_fmt=png求偏导,得到640?wx_fmt=png;当640?wx_fmt=png时,640?wx_fmt=png,对640?wx_fmt=png求偏导,得到640?wx_fmt=png。经过对比发现,640?wx_fmt=png时,目标函数最小,故最终确定640?wx_fmt=png

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

640?wx_fmt=png

根据如上计算过程,得到参数w和b的估计值,并利用前文介绍的分割“超平面”表达式640?wx_fmt=png进一步得到“超平面”方程:

640?wx_fmt=png

值得注意的是,对比图中的A、B、C三点和拉格朗日乘子640?wx_fmt=png,当640?wx_fmt=png时,对应的样本点会落在两条虚线之上,否则样本点在“分割带”之外。对于虚线之上的样本点,称之为支持向量,即它们是构成SVM模型的核心点,而其他点对“超平面”w和b的计算没有任何贡献。

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

05

结语

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

推荐阅读--Top6

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sim1480

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值