SVM入门笔记

2019-03-20  本文已影响0人  zealscott

本文不是一篇正式的tutorial,只是帮助回忆和理解SVM推导的笔记。此文章会长期更新。

分类问题

SVM(support vector machine)是一种著名的分类算法。我们学过Logistic回归,但它只能处理简单的线性分类。在现实生活中,很多问题的属性不能简单的用线性分类完成,或者说线性分类的效果不好,这时候我们就要想其他办法。

超平面

我们可以想象这样一个方程:

w^Tx + b = 0

若这里的x是二维向量,那么就是我们熟悉的平面方程。若大于二维,则是一个超平面,在SVM中,这个超平面也被称为决策面。

我们的目标就是想找到这样一个决策面,使得样本点能够较好的分布在超平面两侧,这就达到了我们分类的目的。

分类间隔

很显然,对于样本点来说,这样的决策面肯定不止一个。那么,如何来度量我们分类好坏的标准呢?

在SVM中,我们使用分类间隔来度量,所谓分类间隔,是指保证决策面方向不变且不会错分样本的情况下移动决策面,会在原来的决策面两侧找到两个极限位置(越过则会产生错分现象)。因此,这两条平行线(面)之间的垂直距离就是这个决策面对应的分类间隔

不同方向的最优决策面通常是不同的,那个具有最大间隔的决策面就是SVM要寻找的最优解。而这个真正的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为支持向量

根据我们学习过的平面距离可以得到:

d = \frac {|w^T + b|}{||w||}

我们首先考虑一个决策面是否能够将所有样本都正确分类的约束。我们可以为每个样本点x_i加上一个类别标签y_i = \{-1,1\},假如我们的决策面方程能够完全正确的对所有样本点进行分类,则可以得到:

f(x)=\left\{\begin{aligned}w^Tx_i + b >0 \space for \space y_i = 1 \\w^Tx_i + b <0 \space for \space y_i = -1\end{aligned}\right.

如果我们要求再高一点,假设决策面正好处于间隔区域的中轴线上,并且相应的支持向量对应的样本点到决策面的距离为d,那么公式可以进一步写成:

f(x)=\left\{\begin{aligned}(w^Tx_i + b )/||w||\ge d \space \forall y_i = 1 \\ (w^Tx_i + b )/||w||\le -d \space \forall y_i = -1\end{aligned}\right.

对公式重写(两边同时除以d):

f(x)=\left\{\begin{aligned}w_d^Tx_i + b_d >1 \space for \space y_i = 1 \\w_d^Tx_i + b_d <1 \space for \space y_i = -1\end{aligned}\right. \quad w_d = \frac{w}{||w||d},b_d = \frac {b}{||w||d}

由于w_dw并没有本质差别,因此不再做区分,我们的目标是想要在正确分类的情况下使得分类间隔最大化,即max \{d\},也等价于min \{ \frac {1}{2} ||w||^2\}

因此,我们得到我们问题的总描述:

\min \frac {1}{2} ||w||^2

s.t. \quad y_i(w^Tx_i +b)\ge1,i=1,...,n

margins

Optimal margin classifier

我们的目标是最大化margins,因此可以将原问题写为:

\max \frac{\gamma}{||w||}

s.t. y^{(i)}(w^Tx^{(i)} + b) \ge \gamma

但这依然不容易求解,联想到,我们已经使得无论w,b 如何 scale,都不会影响最终的值,因此,总是可以使w,b 满足\gamma = 1,因此,我们的目标函数可以写为\max \frac{1}{||w||}。注意到,最大化\frac{1}{||w||}和最小化||w||^2是一回事情(更容易求导),因此,我们将原问题转为了凸优化问题:

\min \frac {1}{2} ||w||^2

s.t. \quad y_i(w^Tx_i +b)\ge1,i=1,...,n

线性可分情况

拉格朗日函数

这是一个有约束条件的极值问题,因此可使用拉格朗日函数表达:

L(w,b,a) =\frac {1}{2} ||w||^2 - \sum\limits _{i=1}^n \alpha_i(y_i(w^Tx_i +b)-1)

我们令\alpha_i \ge 0,\theta(w) = {max}_{a_i \ge 0} L(w,b,a)。容易验证:当某个约束条件不满足时,例如y_i(w^Tx_i +b)<1,则有\theta(w) = \infty(只要令\alpha _i = \infty而当所有约束都满足时,则有\theta(w) = \frac {1}{2} ||w||^2,即为最初要最小化的量。

这样,我们就使用拉格朗日函数将所有约束条件集中到一个函数中,目标函数变成了:

\min\limits_{w,b}\theta(w) = \min\limits_{w,b} \max\limits_{\alpha_i\ge 0}L(w,b,a) = p^*

这里用p^*表示这个问题的最优解,且与最初的问题是等价的,但如果直接面对这个函数,有w,b两个参数,并且\alpha还是不等式约束,不好求解。那么我们可以转化为对偶问题:

\max\limits_{\alpha_i\ge 0}\min\limits_{w,b} L(w,b,a) = d^*

这个新问题的最优解表示为d^\star,且有d^{\star} \le p^{\star},在某些情况下这两者相等,因此可以求解对偶问题来间接求解原始问题。

KKT条件

由于对偶问题和原始问题有 d^{\star} \le p^{\star} 的关系,但我们更希望取等号,这样我们就可以利用对偶问题来求得原问题的最优解。

而满足这种条件的约束称为KKT条件。

首先重新定义一下凸优化问题:

\min f(w)

s.t. \quad g_i(w) \le 0

h_i(w) = 0

拉格朗日函数可以表示为:L(w,\alpha,\beta) = f(w) + \sum \alpha_i g_i(w) + \sum \beta_i h(w)

KKT条件可以表示为:

\frac{\partial}{\partial w_i}L(w^*,\alpha^*,\beta^*) = 0

\frac{\partial}{\partial \beta_i}L(w^*,\alpha^*,\beta^*) = 0

\alpha_i^* g_i^*(w^*) = 0

g_i(w^*) \le 0

\alpha^* \ge 0

其中第三个条件被称为dual complementarity condition,也就是说,只有在g_i^{\star}(w^{\star}) = 0\alpha \ne 0,也就是真正作为support vector,在后面的SMO中会有帮助。

对偶问题求解

我们需要求解的方程为:

\max\limits_{\alpha_i\ge 0}\min\limits_{w,b} L(w,b,a) = d^*

首先固定\alpha,对w,b求导数:

\frac{\partial L }{\partial w} = 0 \Rightarrow w =\sum\limits_{i=1}^{n}a_iy_ix_i

\frac{\partial L }{\partial wb} = 0 \Rightarrow\sum\limits_{i=1}^{n}a_iy_i = 0

将上面的结果带到L(w,b,a)中可得:

\begin{equation}\begin{split} L(w,b,a)&=\frac {1}{2} ||w||^2 - \sum\limits _{i=1}^n \alpha_i(y_i(w^Tx_i +b)-1) \\& =\frac {1}{2} ||w||^2 - \sum\limits_{i=1}^n a_iy_iw^Tx_i - \sum\limits_{i=1}^n a_iy_ib + \sum\limits_{i=1}^n a_i \\& =-\frac {1}{2} \sum\limits_{i,j = 1}^n a_ia_jy_iy_jx^T_ix_j + \sum\limits _{i= 1}^n a_i \end{split}\end{equation}

这样,我们的目标函数就变为:

\max\limits_{\alpha} \sum\limits _{i= 1}^n a_i-\frac {1}{2} \sum\limits_{i,j = 1}^n a_ia_jy_iy_jx^T_ix_j

s.t. \quad a_i\ge0,i=1,..., and \sum\limits_{i=1}^{n}a_iy_i = 0

这样,我们的目标就变成了求\alpha,从而可以求出:

w =\sum\limits_{i=1}^{n}a_iy_ix_i

b = - \frac {\max _{i:y_i = -1} w^Tx + \min_{i:y_i = 1}w^Tx _i}{2}

\alpha比直接求w,b简单多了,其中SMO算法是目前最常用的,我们之后再说。

我们目前的分类函数为f(x) = w^Tx+b,带入:

\begin{equation}\begin{split} f(x) &= (\sum \alpha_iy_ix_i)^Tx +b \\& = \sum \alpha _iy_i(x_ix) +b \end{split}\end{equation}

注意,这里的(x_ix)表示向量乘积,因此,对于新点x只需要计算它与训练数据点的内积即可。这一点在之后的kernel函数中也会使用。

线性不可分情况

核函数

正则化&不可分

SMO算法

我们已经将SVM的基本问题从attributes空间通过kernel转到feature空间,同时定义了有正则项的对偶函数,最后剩下的就是如何求解了。

Coordinate ascent

我们之前已经熟悉了gradient ascent和Newton's method两种优化算法,现在介绍一种新的优化方法。

假设我们的优化目标是\max\limits_{\alpha} W(\alpha_1,\alpha_2,...,\alpha_m)

那么,我们按照一定的order对某些变量依次进行更新(从启发式算法角度考虑,我们的更新order是从希望更新的参数变化最大的开始):

\alpha_i := \arg\max_{\hat{\alpha_i}} W(\alpha_1,\alpha_2,..\alpha_i.,\alpha_m)

这种优化算法非常有效,收敛得很快。

SMO

\max\limits_{\alpha} \sum\limits _{i= 1}^n a_i-\frac {1}{2} \sum\limits_{i,j = 1}^n a_ia_jy_iy_j(x^{(i)},x^{(j)}

s.t. \quad 0\le \alpha \le C

\sum\limits_{i=1}^m \alpha_i y^{(i)} = 0

我们如果直接对满足约束条件的优化问题使用coordinate ascent,则会发现,如果我们需要更新的\alpha_1,在约束条件下,没有办法得到更新后的值。这是因为:

\alpha_1y^{(1)} = - \sum\limits_{i=2}^m \alpha_i y^{(i)}

因此,解决该问题,至少需要我们同时更新两个值。

首先,如果我们同时更新\alpha_1,\alpha_2,则约束条件为:

\alpha_1 y^{(1)} + \alpha_2y^{(2)} = -\sum\limits_{i=3}^m \alpha_i y^{(i)} = \varepsilon

实际上,由于0\le \alpha \le C,因此可以更进一步得到其范围:

55296069552

带入目标函数为:

W(\alpha_1,\alpha_2,...,\alpha_m) = W((\varepsilon - \alpha_2y^{(2)}),\alpha_2,...,\alpha_m)

实际上,根据我们之前写的W的具体形式,这里就是一个关于\alpha_2的二次型函数:a \alpha_2^2 + b\alpha_2 + c,同时满足某些约束L\le \alpha_2 \le H,这样我们很容易就可以求得更新后的\alpha_2的值。

这样,我们就可以按照coordinate ascent的方式依次更新所有的参数,直到收敛。

上一篇 下一篇

猜你喜欢

热点阅读