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