svm简单推导

支持向量机(support vector machine, svm)在小样本、非线性、高维模式识别问题中有很多优势,并且能够方便地扩展到函数拟合等其他机器学习问题中。

1. svm思想

  1. 将低维空间中线性不可分的数据通过kernel trick映射到高维空间中,使得数据变得线性可分,从而实现分类;
  2. 寻找一个分割平面,使得两类数据距离这个平面最近的点到这个平面的距离相等且最大,这个平面即为所求分离超平面。

2. svm简单推导(适用于面试时手推公式)

svm的详细原理介绍及推导可见参考3(写的真的好,深入浅出),此处仅为面试时手推公式用的简洁版推导。


图片来源于参考3

如上图所示有两类样本,其中圆形样本的标签为\(y=+1\),正方形样本的标签为\(y=-1\)。设所求超平面的方程为:

\[g(x)=w^T x+b=0 \]

其中\(w,x\)均为向量,\(b\)是标量。在上图中所求超平面即为中间的直线\(H\)。我们定义某个样本点\(x_i\)到超平面的距离为:

\[\rho_i=y_i(w^Tx_i+b) \]

其中\(y_i\)是样本点\(x_i\)的标签,是个标量。容易知道\(y_i(w^Tx_i+b)\)总是大于0的(应为若\(y_i=+1\),表明样本点\(x_i\)属于此类样本,则\(w^Tx_i+b>0\),同理,若\(y_i=-1\),则\(w^Tx_i+b<0\)),因此它的值就等于\(|g(x_i)|\)。我们对间隔\(\rho_i\)进行归一化,得到几何间隔\(\delta_i\):

\[\delta_i=\frac{1}{||w||}|g(x_i)| \]

在上图中,\(H\)是分类面,\(H_1\)\(H_2\)平行于\(H\),且过离\(H\)最近的两类样本。\(H_1\)\(H\)\(H_2\)\(H\)的距离即为几何间隔。我们的目标是最大化几何间隔,通常我们是固定间隔\(g(x)\),将其固定为1,然后寻找最小的\(||w||\)。于是我们将目标函数定义为:

\[min ||w|| \]

为了后续计算方便,我们将目标函数改写为:

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

另外我们还要加入约束条件。前面说到我们把间隔\(|g(x)|\)固定为1,则对于其他样本点,他们都应该在间隔外面。因此有:

\[|g(x_i)|=y_i(w^Tx_i+b)\geq 1 \]

综上,我们的优化问题变为求解以下函数:

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

\[subject\ to\ y_i(w^Tx_i+b)\geq 1(i=1,2,...,n,n是样本数) \]

回顾一下,我们的目标是要求一个最优的超平面方程\(g(x)=w^Tx+b=0\),要求这个最优的超平面方程,就是要求出参数向量\(w\)(参数b在求出了参数\(w\)后只要带入几个支持向量样本即可求得,支持向量就是落在\(H_1\),\(H_2\)上的样本点)。其实向量\(w\)只与支持向量及其标签有关,因此\(w\)可以表示如下:

\[w=\alpha_1y_1x_1+\alpha_2y_2x_2+...\alpha_iy_ix_i+...+\alpha_ty_tx_t \]

其中\(x_1,...,x_t\)\(t\)个支持向量,\(\alpha_1,...,\alpha_t\)是系数,也叫做拉格朗日乘子,\(y_1,...,y_t\)是支持向量对应的标签。\(w\)也可以表示如下:

\[w=\sum_{i=1}^{t} (\alpha_iy_ix_i) \]

\(g(x)\)的表达式可以改为:

\[g(x)=w^Tx+b=<w,x>+b=\sum_{i=1}^{t}\alpha_iy_i<x_i,x>+b=\sum_{i=1}^{t}\alpha_iy_ik(x_i,x)+b \]

其中\(<\cdot>\)表示内积,\(k(\cdot)\)表示核函数。要求超平面方程,我们就是要求\(g(x)\),要求\(g(x)\),就是要求\(\alpha_i(i=1,...,t)\)
因为有离群点(对于正样本,即为\(H_1\)左边的点,对于负样本,即为\(H_2\)右边的点)的存在,我们引入松弛变量\(\gamma\),则目标函数改为如下:

\[min \frac{1}{2}||w||^2+C\sum_{i=1}^{t}\gamma_i^2 \]

\[subject\ to\ y_i(w^Tx_i+b)\geq 1-\gamma_i(i=1,...,t),\gamma_i\geq 0 \]

其中\(C\)为惩罚因子,\(C\)越大,表示对离群点越重视,表示你非常不愿意放弃这些离群点。非离群点对应的松弛变量为0。松弛变量越大,表示离群点偏离得越远。

3. 核方法的思想

核方法的主要思想是基于这样一个假设:低维空间中线性不可分的点集在高维空间就变得线性可分了,如下图所示:


图片来源于网络

那么怎么将低维空间的点映射到高维空间呢?通过核技巧可以巧妙地解决这个问题。
高维空间中向量的乘积只要通过低维空间中点的核函数就可以计算,这种方法成为核技巧(kernel trick)。即只要在低维空间中计算两个点的核函数,我们就相当于得到这两个点在高维空间的内积。公式表达如下:

\[k(x_1,x_2)=<\phi(x_1),\phi(x_2)> \]

其中\(k(\cdot)\)是核函数,\(x_1,x_2\)是低维空间中的两个点,\(\phi(x_1),\phi(x_2)\)\(x_1,x_2\)在高维空间中的向量表示,\(<\phi(x_1),\phi(x_2)>\)表示的是高维向量\(\phi(x_1)\)\(\phi(x_2\)的内积。

4. 常用的核函数

线性核:

多项式核:

径向基核函数(Radial Basis Function):

高斯核函数:

Reference:

  1. https://blog.csdn.net/xianlingmao/article/details/7719122
  2. http://blog.sina.com.cn/s/blog_eb23a2510102x6he.html
  3. http://www.blogjava.net/zhenandaci/archive/2009/02/13/254519.html
  4. https://blog.csdn.net/lisi1129/article/details/70209945?locationNum=8&fps=1
posted @ 2018-08-10 10:42  wumh7  阅读(1508)  评论(0编辑  收藏  举报