首页 > 代码库 > SVM公式详解
SVM公式详解
点(x,y)到平面(w,b)的距离公式是:$\gamma=\frac{1}{||w||}y(xw+b)$。我们称之为几何间隔。另外$\hat{\gamma}=y(xw+b)$记为函数间隔。
SVM的基本思路就是,寻找一个能够正确划分数据集,并且几何间隔最大的超平面。这个目标可以表达为:
$$\max_{w,b}{\gamma} , \ s.t., \ \frac{1}{||w||}y_i(wx_i + b) \geq \gamma$$
可以改写为:
$$\max_{w,b}{\frac{\hat{\gamma}}{||w||}} , \ s.t., \ y_i(wx_i + b) \geq \hat{\gamma}$$
实际上,可以按比例将$w$和$b$改成合适的大小,使$\hat{\gamma}=1$,即
$$\max_{w,b}{\frac{1}{||w||}} , \ s.t., \ y_i(wx_i + b) \geq 1$$
最大化$\frac{1}{||w||}$和最小化$||w||$是一样的,也就是和最小化$\frac{1}{2}||w||^2$是一样的(这样方便后续计算),所以我们的目标函数变成了
$$ \min_{w,b}{\frac{1}{2}||w||^2} , \ s.t., \ y_i(wx_i + b) \geq 1 $$
但是这个带约束条件的优化很难求解,于是这里用到了拉格朗日对偶。定义拉格朗日函数:
$$L(w,b,\alpha)=\frac{1}{2}||w||^2 - \sum_{i}\alpha_i({y_i(wx_i + b)-1})$$ 其中$\alpha$是拉格朗日乘子
我们定义$\theta(w,b)=\max_{\alpha,\alpha \geq 0}{L(w,b,\alpha)}$,当${y_i(wx_i + b)-1} \leq 0$时,我们一定可以通过调整$\alpha$的值来是$\theta$为正无穷,这样我们把原问题转化为
$$\min_{w,b}{\theta(w,b)}=\min_{w,b}{\max_{\alpha,\alpha \geq 0}{L(w,b,\alpha)}}$$
这样的最小值一定满足那些约束条件。这里我们可以得到对偶问题:$\max_{\alpha,\alpha \geq 0}{\min_{w,b}{L(w,b,\alpha)}}$
这个对偶问题把w,b放在内层中,比较好求解。对于一般的问题,有$d \leq p$。对于满足强对偶条件的问题,有$d = p$,即原问题的解和对偶问题的解是一样的。
对于强对偶问题,$w^*,\alpha^*$是一组解的充要条件是满足下面的KKT条件:
$$\nabla_w L(w^*,\alpha_*)=0\\ \nabla_\alpha L(w^*,\alpha_*)=0\\ \alpha^* g(w_*)=0\\g(w_*) \leq 0\\ \alpha \geq 0$$
回到SVM的优化问题,由KKT条件可知,$\min_{w,b}{L(w,b,\alpha)}$的解满足
$\nabla_w L()=0 \Rightarrow w=\sum_{i}{\alpha_i y_i x_i}$,$\nabla_b L()=0 \Rightarrow \sum_i{a_i y_i}=0$
把w和b重新带入到L函数中,得到:$L(w,b,\alpha)=\sum_i{\alpha_i}-\frac{1}{2}\sum_{i,j}{y_i y_j \alpha_i \alpha_j (x_i)^T x_j} ,\ s.t. \ \alpha \geq 0, \sum_i{\alpha_i y_i}=0$
到这里,式子中只剩下了$\alpha$这一个变量。那么我们剩下的步骤就是求解$\max_{\alpha, \alpha \geq 0}{L(w,b,\alpha)}$。
一旦求出了$\alpha$,w可以通过$ w=\sum_{i}{\alpha_i y_i x_i}$得到,为了满足正负样本的支持向量到超平面的距离相等,b的值为$b=\frac{1}{2}(\min_{y_i=1}{wx_i} + \max_{y_i=-1}{wx_i})$
在讲如何计算$\alpha$的值之前,还要引入一个概念,那就是软间隔。我们之前讨论的情况都是建立在样例线性可分的假设上,当样例线性不可分时,我们需要将模型进行调整,以保证在不可分的情况下,也能够尽可能地找出分隔超平面。
$$\min_{\gamma, w, b}{\frac{1}{2}||w||^2+C\sum_i{\zeta_i}}, \ s.t. \ y_i(wx_i+b) \geq 1-\zeta_i, \zeta_i \geq 0$$
引入松弛变量$\zeta$之后,就允许某些样例的间隔小于1。C越大表示越不能接受离群点。再次建立新的拉格朗日函数:
$$L(w,b,\alpha)=\frac{1}{2}||w||^2 + C\sum_i{\zeta_i} - \sum_{i}\alpha_i({y_i(wx_i + b)-1+\zeta_i})-\sum_i{\beta \zeta_i}$$
由KKT条件可以知道,
$ \nabla_w{L}=0 \Rightarrow w=\sum_i{\alpha_i y_i x_i}\\ \nabla_b{L}=0 \Rightarrow \sum_i{\alpha_i y_i} = 0\\ \nabla_\zeta{L}=0 \Rightarrow \alpha_i = C- \beta_i\\ \alpha_i \geq 0, \beta_i \geq 0 \Rightarrow 0 \leq \alpha_i \leq C$
把w和b重新带入到L函数中,得到新的最优化函数:$\max_{\alpha}{L(w,b,\alpha)}=\sum_i{\alpha_i}-\frac{1}{2}\sum_{i,j}{y_i y_j \alpha_i \alpha_j (x_i)^T x_j} ,\ s.t. \ 0 \leq \alpha \leq C , \sum_i{\alpha_i y_i}=0$
下面开始讲如何计算$\alpha$的值——SMO算法。SMO算法是一种启发式算法,目标是使所有的$\alpha$满足KKT条件。为了达到这个目标,算法每次取两个变量,固定其它变量,每次只优化这两个变量。这个优化两个变量的子问题可以简单地通过求导的方法求解。这里为什么是两个变量?因为我们的约束条件中有$\sum_i{\alpha_i y_i}=0$,确定一个变量的时候,另一个变量也就随之确定了。
现在假设选择的两个变量是$\alpha_1, \alpha_2$,其它变量是固定的。于是最优化问题可以重写成:
$$\min_{\alpha}{L(w,b,\alpha)}=\frac{1}{2}K_{11}\alpha_1^2+\frac{1}{2}K_{22}\alpha_2^2+K{12} y_1 y_2 \alpha_1 \alpha_2 +y_1 v_1 \alpha_1 +y_2 v_2 \alpha_2 - \alpha_1 - \alpha_2 + (const)$$
其中$v_i = \sum_{j=3}{y_j \alpha_j K_{ij}}$。
另外还有:$y_1 \alpha_1 = -\sum_{i=3}{y_i \alpha_i} - y_2 \alpha_2 = D - y_2 \alpha_2$,D表示一个常数。把这个式子继续代入优化函数中:
$$L()=\frac{1}{2}K_{11}(D - y_2 \alpha_2)^2+\frac{1}{2}K_{22}\alpha_2^2+K_{12} y_1 y_2 (D - y_2 \alpha_2) \alpha_2 +y_1 v_1 (D - y_2 \alpha_2) +y_2 v_2 \alpha_2 -(D - y_2 \alpha_2) - \alpha_2$$
对$\alpha_2$求导数:
$\frac{\partial L}{\partial \alpha_2} = K_{11} \alpha_2 + K_{22} \alpha_2 - 2K_{12} \alpha_2 - K_{11} D y_2 + K_{12} D y_2 + y_1 y_2 - 1 - v_1 y_2 + v_2 y_2$
$\frac{\partial L^2}{\partial \alpha_2^2} = K_{11} + K_{22} - 2K_{12}$
一般情况下二阶导数大于0,当$x_1,x_2$完全相同时,会出现二阶导数等于0的情况,此时L是单调函数,最小值在边缘处取到,直接将左边缘和右边缘带入就可以知道哪个是最小值了。
考虑二阶导数大于0的情况,最小值在导数等于0的地方取到。通过简单计算可以得到,
$$\alpha_2^{new,unc}=\alpha_2^{old}+\frac{y_2(E_1-E_2)}{K_{11}+K_{22}-2K_{12}}$$
其中$E_i=wx_i+b-y_i=\sum_j{\alpha_j y_j K_{ji}}+b - y_i$
再来看$\alpha_2$的取值范围。假设$y_1=y_2$,有
$$\left\{ \begin{array}{lr} \alpha_1 + \alpha_2 = \alpha_1^{old} + \alpha_2^{old}, \\ 0 \leq \alpha_1 \leq C, & \Rightarrow max(0,a_2^{old}+a_1^{old}-C) \leq \alpha_2 \leq min(C, a_2^{old}+a_1^{old}-C)) \\ 0 \leq \alpha_2 \leq C, \end{array} \right. $$
同理可以得到$y_1 \neq y_2$时候的范围。$max(0,a_2^{old}-a_1^{old}) \leq \alpha_2 \leq min(C, C + a_2^{old} - a_1^{old}))$
对之间求出来的$\alpha_2^{new,unc}$按照这个取值范围剪辑一下就能得到最后的$\alpha_2^{new}$。
在每次完成两个变量的优化之后,我们需要重新计算b。当$0 < \alpha_1 < C$时,由KKT条件可知:$0 < \alpha_1 < C \Rightarrow y_1(wx_1 + b) = 1 \Rightarrow \sum_i{\alpha_i y_i K_{i1} + b } = y_1$
于是,$b_1^{new} = y_1 - \sum_{i=3}{\alpha_i y_i K_{i1}} - \alpha_1^{new}y_1 K_{11} - \alpha_2^{new}y_2 K_{21}\\= -E_1 - y_1 K_{11}(\alpha_1^{new} - \alpha_1^{old}) - y_2 K_{21}(\alpha_2^{new} - \alpha_2^{old}) + b^{old}$
同理可以得到$b_2^{new}$
SVM公式详解