5. support vector machine
1. 了解SVM
1. Logistic regression回顾
Logistic regression目的是从特征中学习出一个0/1二分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic function(或称作sigmoid function)将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。
假设函数
![](http://img-my.csdn.net/uploads/201304/05/1365174223_1807.png)
![]() |
可以看到,将输出从无穷映射到了(0,1)。 而假设函数就是特征属于y=1的概率。 |
从而,当我们要判别一个新来的特征属于哪个类时,只需求 $h_θ(x)$ 即可,若$h_θ(x)$大于0.5就是y=1的类,反之属于y=0类。
此外,$h_θ(x)$ 只和$θ^Tx$有关,$θ^Tx > 0$,那么$h_θ(x) > 0.5$,而$g(z)$只是用来映射,真实的类别决定权还是在于$θ^Tx$。
再者,当$θ^Tx \gg 0$时,$h_θ(x)=1$,反之$h_θ(x)=0$。如果我们只从$θ^Tx$出发,希望模型达到的目标就是让训练数据中y=1的特征$θ^Tx \gg 0$,而是y=0的特征$θ^Tx \ll 0$。Logistic回归就是要学习得到$θ$,使得正例的特征远大于0,负例的特征远小于0,而且要在全部训练实例上达到这个目标。
接下来,尝试把logistic regression做个变形。首先,将使用的结果标签$y = 0$和$y = 1$替换为$y = -1,y = 1$,然后将 $θ^Tx=θ_0+θ_1x_1+...+θ_nx_n,(x_0=1)$ 中的 $θ_0$替换为$b$,最后将后面的$θ_1x_1+θ_2x_2+...+θ_nx_n$替换$W^Tx$。如此,则有了$θ^Tx=W^Tx+b$。
也就是说除了y由y=0变为y=-1外,线性分类函数跟logistic regression 的形式化表示$h_θ(x)=g(θ^Tx)=g(W^Tx+b)$没区别。
2. 间隔与支持向量
给定训练样本集$D={(x_1,y_1), (x_2, y_2),...,(x_m, y_m)}$, $y_i\in{-1, +1}$, 分类学习最基本的想法就是基于训练集$D$在样本空间中找到一个划分超平面,将不同类别的样本分开,但能将训练样本分开的划分超平面可能有很多,如下图:
直观上来看,应该去找位于两类训练样本“正中间”的划分超平面,即上图中最粗的那条,因为该划分超平面对训练样本局部扰动的“容忍”性最好。例如,由于训练集的局限性或噪声的因素,训练集外的样本可能比上图中训练样本更接近两个类的分个界,这将使许多划分超平面出现错误,而中间最粗的超平面受影响最小。换言之,这个划分超平面所产生的分类结果是最鲁棒的,对未见示例的范化能力最强。
在样本空间中,划分超平面可通过如下线性方程来描述:
$W^Tx+b = 0$
其中$W=(w_1;w_2;...;w_K)$为超平面法向量,决定了超平面的方向;$b$为位移项,决定了超平面与原点之间的距离。在超平面确定的情况下,$\lvert{W^Tx+b}\rvert$能够表示点$x$距离超平面的远近,而通过观察 $W^Tx+b$的符号与类标记$y$的符号是否一致可判断分类是否正确。于是引出了“函数间隔”的概念:
$\hat{\gamma} = \lvert{W^Tx+b}\rvert = y*(W^Tx+b)$
但这样定义间隔有问题,即如果我们成比例改变$(W,b)$,函数间隔值也会改变,所以加上约束条件引入真正的间隔--“几何间隔”
给定一个超平面 $W^Tx+b=0$, 样本空间中任意点$x$到超平面$(W,b)$的距离(几何间隔)为:
$\gamma=\frac{\hat{\gamma}}{\lVert{W}\rVert}=\frac{\lvert{W^Tx+b}\rvert}{\lVert{W}\rVert}=\frac{y*(W^Tx+b)}{\lVert{W}\rVert}$
而超平面(w,b)关于D中所有样本点(xi,yi)的函数间隔最小值(其中,x是特征,y是结果标签,i表示第i个样本),便为超平面(w, b)关于训练数据集D的几何间隔:
$\gamma= \min \gamma_i$
假设超平面$(W,b)$能将训练样本正确分类,即对于$(x_i, y_i)\in{D}$, 若 $y_i= +1$ 则有 $W^Tx_i+b>0$;若 $y_i= -1$ 则有 $W^Tx_i+b<0$. 我们令:
$W^Tx_i+b \ge +1, y_i = +1;$
$W^Tx_i+b \le -1, y_i = -1.$
这里也就是令这个超平面关于训练集的函数间隔为1。
如下图所示,距离超平面最近的这几个训练样本使得上式的等号成立,他们被称为“支持向量”,两个异类支持向量到超平面的距离之和为
$\gamma = \frac{2}{\lVert{W}\rVert}$
它被称为“间隔”。
而对于一个数据集进行分类,当超平面离数据集的“间隔”越大,分类确信度也越大。所有,为例获得分类的确信度尽量高,需要让所选择的超平面能够最大化这个“间隔”值,即
$\max \limits_{W,b}\frac{2}{\lVert{W}\rVert}$
s.t. $y_i(W^Tx_i+b) \ge 1, i=1,2,...m.$
显然,为了最大化间隔,仅需最大化 ${\lVert{W}\rVert}^{-1}$. 这等价于最小化 ${\lVert{W}\rVert}^{2}$, 于是,上式可重写为:
$\min \limits_{W,b}\frac{1}{2}{\lVert{W}\rVert}^{2}$ s.t. $y_i(W^Tx_i+b) \ge 1, i=1,2,...m.$ |
1 |
这里的意思就是找到合适的$W$和$b$,使得每个样本都能正确分类且每个样本到这个超平面的“函数间隔”都大于1的前提下,能最小化${\lVert{W}\rVert}^{2}$。到这里为止,这就是支持向量机(Support Vector Machine)的基本型。
2. 对偶问题
我们希望求解 1 式来得到最大间隔划分超平面所对应的模型:
$f(x) = W^Tx + b$ | 2 |
对 1 式使用拉格朗日乘子法可得到其“对偶问题”,具体来说,对 1 式的每个约束添加拉格朗日乘子 $\alpha_i \ge 0$,则该问题的拉格朗日函数可写成:
$L(W,b,\alpha) = \frac{1}{2}{\lVert{W}\rVert}^{2} + \sum_{i=1}^{m}\alpha_i(1-y_i(W^Tx_i + b))$ | 3 |
其中$\alpha=(\alpha_1;\alpha_2;...;\alpha_m)$。令$L(W,b,\alpha)$对$W$和$b$的偏导为零可得:
$W$=\sum_{i=1}^{m}\alpha_iy_ix_i \ ,$ | 4 | |
$0=\sum_{i=1}^{m}\alpha_iy_i \ .$ | 5 |
带入公式 2 ,得到公式 1 的对偶问题:
$\max \limits_{\alpha}\sum_{i=1}^{m}\alpha_i - \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j$ s.t. $\sum_{i=1}^{m}\alpha_iy_i =0, \alpha_i \ge 0, i=1,2,...m.$ |
6 |
解出$\alpha$后,求出$W$和$b$即可得到模型:
|
$f(x)=W^Tx+b$ $=\sum_{i=1}^{m}\alpha_iy_ix_i^Tx+b$ |
7 |
如何确定偏移项$b$呢,注意到对任意支持向量$(x_s,y_s)都有$y_sf(x_s)=1$,即:
$y_s(\sum_{i\in S}\alpha_iy_ix_i^Tx+b)=1$ | 8 |
其中$S=\{i|\alpha > 0, i=1,2,...,m\}$为所以支持向量的下标集。实际中使用所有支持向量求解的平均值求$b$:
$b = \frac{1}{\lvert{S}\rvert}\sum_{s\in S}(y_s-\sum_{i\in S}\alpha_iy_ix_i^Tx)$ | 9 |
2. 核函数
前面的讨论中,我们假设训练样本是线性可分的,即存在一个划分超平面能将训练样本正确分类。 然而在实际任务中,原始样本空间也许并不存在一个能正确划分两类样本的超平面。
对这样的问题,我们可以将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内变得线性可分。幸运的是,如果原始空间是有限维,即特征数有限,那么一定存在一个高维特征空间使得样本可分。
令$Φ(x)$表示将$x$映射后的特征向量,于是,在特征空间中划分超平面所对应的模型可表示为:
$f(x) = W^T\phi(x)+b$ | 10 |
设想存在这样一个函数:
$k(x_i,x_j)\ =\ <\phi(x_i),\phi(x_j)> \ =\ \phi(x_i)^T\phi(x_j)$ | 11 |
求解后得到:
$f(x) = W^T\phi(x)+b$ |
12 |
这里的$k(\bullet,\bullet)$就是“核函数”。
常见的核函数有:
高斯核又称为RBF径向基核。
参考:
周志华 机器学习
http://blog.csdn.net/v_july_v/article/details/7624837