本章参照周志华《机器学习》第六章编写
支持向量机是一个经典的二分类模型,基本模型定义为特征空间中最大间隔的线性分类器。其优化目标是间隔最大化。
介绍了 SVM 的基本概念,从 hard margin 开始,推导了SVM的数学表达式;之后介绍了向高维特征向量空间映射的核函数;然后介绍了 soft margin;最后介绍了 SVR,即在回归问题中 支持向量机的应用。
6.1 间隔与支持向量
这里首先需要明白支持向量机(Support vector machine,SVM)是应用于线性可分类的情况下的。
对于线性可分类的问题,我们企图寻找一个超平面可以将样本进行分类。但实际情况中,我们可以找到多个超平面,至于选择哪一个,是要根据间隔(Margin)来决定的。
在样本空间中,划分超平面可以通过来描述。其中为法向量,而 b 为位移项,决定了超平面与原点之间的距离。这个东西可以类比于我们在二维空间中的斜率和截距来确定一条直线。而样本空间中任一点 x到超平面 (w,b) 的距离经过证明,为:
假设超平面可以将样本(x_i,y_i)正确分类,则有:
如下图所示,这距离超平面最近这几个点(向量)正好使得等号成立,叫做支持向量(support vector),而两个异类支持向量到超平面的距离和
称作间隔。
我们想要找到鲁棒性最好的超平面,即要使得 maigin 最大:
显然为了最大化间隔,等价于最小化 ||w||^2
上式重写为
到了这里,就是支持向量机SVM的基本形式。
6.2 对偶问题
上面我们分析得出了需要通过求解最大化间隔算出参数w和b从而确定超平面
但是在求解问题过程中,直接求解是一个凸二次规划问题,不好计算,这里我们考虑做对偶化处理。
这里做对偶化有2个原因:
首先使得问题更容易求解
其次对偶化求解之后出现了向量乘积的形式
这里用 lag 乘值法来做对偶。首先写出来上面求最值问题的 lag 函数
上式很容易验证:当其中有一个约束条件不满足时,L的最大值为 ∞(只需令其对应的α为 ∞即可);当所有约束条件都满足时,L的最大值为1/2||w||^2(此时令所有的α为0),因此实际上原问题等价于:
将最大值最小值交换一下(需要满足KKT条件),变成了原问题的对偶问题:
这样就将原问题的求最小变成了对偶问题求最大(用对偶这个词还是很形象),接下来便可以先求L对w和b的极小,再求L对α的极大。
(1)首先求 L 对 w 和 b 的极小,分别求偏导为0:
将结果带回L:
(2)接着求L关于 \alpha 的极大,通过SMO算法求解(这里不做深入了解):
(3)根据求出的 \alpha,计算出 w 和 b,从而得到分类超平面参数:
在对新的点进行预测时,实际上就是将数据点x*代入分类函数f(x)=w’x+b中,若f(x)>0,则为正类,f(x)<0,则为负类,根据前面推导得出的w与b,分类函数如下所示,此时便出现了上面所提到的内积形式。
即有:
需要注意的是:这里实际上只需计算新样本与支持向量的内积,因为对于非支持向量的数据点,其对应的拉格朗日乘子一定为0,根据最优化理论(K-T条件),对于不等式约束y(w’x+b)-1≥0,满足:
所以引出了一个SVM的重要性质:训练完成后,大部分的训练样本不需要保留,SVM的最终模型只与支持向量有关。
6.3 核函数
很多情况下,问题往往不满足线性可分条件(或者说在当前的特征向量空间下不满足)。经过理论证明,原始特征空间是有限维,那么一定存在一个高维特征空间使得样本存在线性可分超平面。
所以对于这种问题来说,我们通常的做法就是把特征向量映射到跟高维度的特征空间上。
与之前的计算方法相同,通过对偶法,最终求得:
其中 \phi 代表映射关系。
由于这里直接计算,可能面临维度非常高的情况,所以要借用核函数的概念,将最终超平面的结果写成核函数展开的“支持向量展式(support vctor expansion)”:
因此在线性不可分情况下,核函数的选择成了SVM最大的变数。
显然如果已知映射关系则可以求出核函数,但是一般情况下我们是不知道映射关系的。同时核函数要满足如下条件:
可以看到,核函数的构造是十分苦难的,一般的做法都是从已有常用核函数中进行选择:
当然也可以是这些核函数的线性组合、内积、函数计算等。
6.4 软间隔和正则化
我们考虑这样一个问题,其实在现实问题中,很难找到一个核函数使得样本线性可分,即使找到,也难以保证是过拟合带来的线性可分。于是,我们引入软间隔的概念。
所谓软间隔,就是说我们允许一小部分的样本出错:
1.允许一小部分样本不满足约束条件 y(w`x+b)≥1;
2.同时使得不满足的样本点尽量少
在这样的条件下,优化目标可以写成
其中C是一个常数,损失函数 z<0 表示不满足约束,这时候权值为1,代表有损失; z≥0 代表满足约束,权值为0,代表没有损失。当常数C取无穷时,为了满足最小化,所有样本都必须满足约束,即后面的损失项必须全部为0;反之,允许部分样本不满足约束,也就是我们现在讨论的软间隔问题。
0/1 损失函数跟阶跃函数非常相似,虽然其数学含义和损失对应的含义一致,但是由于其数学性质不佳,导致上面的式子难以求解。所以通常用其他的函数来代替 0/1 损失函数。
这里我们先定为 hinge 损失函数,并且引入“松弛变量”,上式写为:
可以看到其实“松弛向量”对应的就是最开始的损失函数那一堆东西,直观上也很好理解。
这里的C也是一个参数,控制着目标函数与新引入正则项之间的权重。
显然,每一个样本数据都对应有自己的松弛变量,表示该样本不满足约束的程度。
对于这含有正则项的问题求解,还是跟之前的求解步骤一样,先用 lag 变成原问题的对偶问题:
将“软间隔”下产生的对偶问题与原对偶问题对比可以发现:新的对偶问题只是约束条件中的α多出了一个上限C,其它的完全相同。
6.5 支持向量回归
前面我们说的都是用SVM来解决分类问题。现在我们看一下对于回归问题,SVM也是可以用的,此时叫做SVR(support vector regression)。
对于传统的回归问题解法,都是根据预测值与真实值之间的差来计算损失,当二者完全相同时候,损失才为0。而SVM式的解法则是这样:假设出我们能够容忍预测与真实值之间的最大偏差为 \theta,那么我们就可以看做,只有当偏差超过 |\theat| 时候(绝对值),才计算误差,也就是说我们得到了一个以 f(x) 为中心, margin = 2*\theta 的SVM,若训练样本落入此间隔带,则认为预测完全正确。
下面就是一系列的数学推导,这里我们先不做深入研究。