上篇主要介绍了神经网络。而本篇围绕的核心则是曾经一度取代过神经网络的另一种监督学习算法–支持向量机(Support Vector Machine),简称SVM。支持向量机是一种经典的二分类模型,基本模型定义为特征空间中最大间隔的线性分类器,其学习的优化目标便是间隔最大化,因此支持向量机本身可以转化为一个凸二次规划求解的问题。
6.1 间隔与支持向量
假设SVM是一个二分类器,那么显而易见,我们需要将输出结果转换为两种类别。下面举一个简单的例子。
对于二分类学习,假设现在的数据是线性可分的,这时分类学习最基本的想法就是找到一个合适的超平面,该超平面能够将不同类别的样本分开,类似二维平面使用ax+by+c=0来表示,超平面实际上表示的就是高维的平面,如下图所示:
如图6.1,能将样本划分开的超平面有很多种,那我们应该去找到哪一个呢?
显然当超平面距离与它最近的数据点的间隔越大,分类的鲁棒性越好,即当新的数据点加入时,超平面对这些点的适应性最强,出错的可能性最小。因此需要让所选择的超平面能够最大化这个间隔Gap(即×和○的间隔)。
因为w*x+b输出的是一个连续值,比如说0.8,1.5,需要将他同1,-1,0比较,上图中最左边那条虚线表示的是通过了最近的一个反例,同理最右边那条虚线表示的是通过了最近的一个正例,这些被边缘线通过的点被叫做支持向量,他们是最重要的,哪怕不要其他点。因为他们规定了正例以及反例的边缘。
常用的间隔定义有两种,一种称之为函数间隔,一种为几何间隔,下面将分别介绍这两种间隔,并对SVM为什么会选用几何间隔做了一些阐述。
6.1.1 函数间隔与几何间隔
函数间隔定义为:
函数间隔其实就是类别标签乘上了f(x)的值,可以看到,该值永远是大于等于0的,正好符合了距离的概念,距离总不能是负的吧。
那么为什么该值可以表示数据点到超平面的距离呢?我们不妨这样想,假设y=1,f(x)=1,其实就是将原来的分类超平面f(x) 向右平移了1个单位,而y=1,f(x)=2是将原来的分类超平面f(x) 向右平移了2个单位,所以f(x)值越大的点到分类超平面的距离当然越远,这就解释了我们之前提出的问题。
但是函数间隔存在一定的问题,上述定义的函数间隔虽然可以表示分类预测的正确性和确信度,但在选择分类超平面时,只有函数间隔还远远不够,因为如果成比例的改变 w 和 b,如将他们改变为 2w 和 2b,虽然此时超平面没有改变,但函数间隔的值 yf (x) 却变成了原来的 4 倍。
所以在实际中,我们定义点到超平面的距离时,采用的是几何间隔。
在介绍几何间隔之前,我们先来看一下下图:
对应的为 x0,由于 w 是垂直于超平面的一个向量,r 为样本 x 到分类间隔的距离,我们有:
此处想使r表示距离,我们必须对w进行标准化,所以需要除以它的二范数。
又由于 x0 是超平面上的点,满足 f(x0) = 0,代入超平面的方程即可算出:
随便写,歪了将就看吧。所以就可以得到:
不过这里的 γ 是带符号的,我们需要的只是它的绝对值,因此类似地,也乘上对应的类别 y 即可,因此实际上我们定义几何间隔为(其实即为点到直线的距离公式):
6.1.2 最大间隔(几何间隔)
下面我们来看看如何求得最大间隔。
由上面可以知道由于几何间隔同比例缩放并不会影响。
6.2 对偶问题
上小节的转换使得变为了一个带约束的凸二次规划问题,按书上所说可以使用现成的优化计算包(QP优化包)求解,但由于SVM的特殊性,一般我们将原问题变换为它的对偶问题,接着再对其对偶问题进行求解。为什么通过对偶问题进行求解,有下面两个原因:
一是因为使用对偶问题更容易求解;
二是因为通过对偶问题求解出现了向量内积的形式,从而能更加自然地引出核函数。
对偶问题,顾名思义,可以理解成优化等价的问题,更一般地,是将一个原始目标函数的最小化转化为它的对偶函数最大化的问题。对于当前的优化问题,首先我们写出它的朗格朗日函数:
拉格朗日乘法及KKT
KKT条件详解
6.11推导:
使用这些条件,可以构建高效算法来解这个方程,比如SMO(Sequential Minimal Optimization)就是其中一个比较著名的。此处暂不深入探讨SMO。
SMO:固定α以外的所有参数,求α的极值。通过约束条件,可以用其它变量将α进行表示。
过程重复以下两步:
1 选取αi、αj
2 固定其它参数,解6.11并更新αi、αj
通过SMO便可以求解出的α,从而计算出w和b,得到分类超平面函数。
在对新的点进行预测时,实际上就是将数据点x*代入分类函数f(x)=w’x+b中,若f(x)>0,则为正类,f(x)<0,则为负类,根据前面推导得出的w与b,分类函数如下所示,此时便出现了上面所提到的内积形式。
这里实际上只需计算新样本与支持向量的内积,因为对于非支持向量的数据点,其对应的拉格朗日乘子一定为0,根据最优化理论(KKT条件),对于不等式约束y(w’x+b)-1≥0,满足:
6.3 核函数
由于上述的超平面只能解决线性可分的问题,对于线性不可分的问题,例如:异或问题,我们需要使用核函数将其进行推广。一般地,解决线性不可分问题时,常常采用映射的方式,将低维原始空间映射到高维特征空间,使得数据集在高维空间中变得线性可分,从而再使用线性学习器分类。
如果原始空间为有限维,即属性数有限,那么总是存在一个高维特征空间使得样本线性可分。若∅代表一个映射,则在特征空间中的划分函数变为:
按照同样的方法,先写出新目标函数的拉格朗日函数,接着写出其对偶问题,求L关于w和b的极大,最后运用SOM求解α。可以得出:
- 原对偶问题变为:
- 原分类函数变为:
求解的过程中,只涉及到了高维特征空间中的内积运算,由于特征空间的维数可能会非常大,例如:若原始空间为二维,映射后的特征空间为5维,若原始空间为三维,映射后的特征空间将是19维,之后甚至可能出现无穷维,根本无法进行内积运算了,此时便引出了核函数(Kernel)的概念。
因此,核函数可以直接计算隐式映射到高维特征空间后的向量内积,而不需要显式地写出映射后的结果,它虽然完成了将特征从低维到高维的转换,但最终却是在低维空间中完成向量内积计算,与高维特征空间中的计算等效(低维计算,高维表现),从而避免了直接在高维空间无法计算的问题。引入核函数后,原来的对偶问题与分类函数则变为:
- 对偶问题:
- 分类函数:
因此,在线性不可分问题中,核函数的选择成了支持向量机的最大变数,若选择了不合适的核函数,则意味着将样本映射到了一个不合适的特征空间,则极可能导致性能不佳。同时,核函数需要满足以下这个必要条件(即对称和半正定):
由于核函数的构造十分困难,通常我们都是从一些常用的核函数中选择,下面列出了几种常用的核函数:
6.4 软间隔支持向量机
前面的讨论中,我们主要解决了两个问题:当数据线性可分时,直接使用最大间隔的超平面划分;当数据线性不可分时,则通过核函数将数据映射到高维特征空间,使之线性可分。现实任务中很难找到核函数使得训练集完全线性可分,且完全的线性可分也可能是过拟合的结果。 为了应对这一问题,允许向量机在一些样本上出错。引入了软间隔的概念。
- 允许某些数据点不满足约束y(w’x+b)≥1;
- 同时又使得不满足约束的样本尽可能少。
这样优化目标变为:
0/1损失函数的函数性质不佳,使得6.29不宜求解。通常使用一些替代函数来替换损失函数,他们通常是0/1损失函数的上界。
常见的替代损失函数有:
其中C为一个参数,控制着目标函数与新引入正则项之间的权重,这样显然每个样本数据都有一个对应的松弛变量,用以表示该样本不满足约束的程度,将新的目标函数转化为拉格朗日函数得到:
按照与之前相同的方法,先让L求关于w,b以及松弛变量的极小,再使用SMO求出α,有:
6.40推导:
将“软间隔”下产生的对偶问题与原对偶问题对比可以发现:新的对偶问题只是约束条件中的α多出了一个上限C,其它的完全相同,因此在引入核函数处理线性不可分问题时,便能使用与“硬间隔”支持向量机完全相同的方法。
6.5 支持向量回归
6.6 核方法
学习过程中参考了资料如下:
1、机器学习 - 周志华
2、百度百科
3、https://blog.csdn.net/u011826404/article/details/75577216
4、https://datawhalechina.github.io/pumpkin-book/#/
5、https://www.jianshu.com/p/2e3c0c583e85
6、https://www.jianshu.com/p/17b11df4c7f6