前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你如何由浅入深地理解线性SVM模型

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

作者头像
1480
发布2019-09-17 16:35:02
8790
发布2019-09-17 16:35:02
举报
文章被收录于专栏:数据分析1480数据分析1480

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模型的实战案例。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据分析1480 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档