Support Vector Machine (1) : 简单SVM原理

目录

Support Vector Machine (1) : 简单SVM原理

Support Vector Machine (2) : Sequential Minimal Optimization

Support Vector Machine (3) : 再谈泛化误差(Generalization Error)

Support Vector Machine Python 代码实现

       Support Vector Machine(1) : 简单SVM原理 

1. background

  对一个二值的分类问题,perceptron algorithm 也能找到一个能完全分离样本的超平面。但是这个超平面与参数初始化的值和优化过程有关,并不能找到一个最好的解。

  SVM使用margin的概念来实现找到一个最好的解,即达到一个最小generalization error(泛化误差)。泛化误差简单来说就是衡量从有限训练集训练得到的模型对实际问题的拟合程度。

2. 原理

  首先我们要定义我们需要解决的问题:对于一个可分离的二元类数据集,我们要找出一个超平面,使得generalizaion error 最小。

  然后,我们需要小小的跳一步,这个最小问题通过统计学习理论,可以转化为使得margin最大的时候就是最优解这样一个等价条件,Margin就是下面这个东西:

        Support Vector Machine (1) : 简单SVM原理

  这其中是如何转化的这个问题就已经超出我们范围之外,这里我们就把它当做一个已知的东西来使用。

  然后我们定义一个prediction function:

        y(x) = WTx + b

  其中 W 和 b 是这个model的参数。如果我们已经得到一个model的参数,那么对于一个待预测的样本x, 先计算其y(x)的值,如果y(x)大于零,则将其判为1;反之则判为-1 。那么可以看到,model的decision boundary 其实就是 WTx + b = 0 确定的平面。那么由我们上面对数据集的假设,应该是存在这么一个平面能将两类点完全分离。就如下图所示。

      Support Vector Machine (1) : 简单SVM原理

  那么问题来了,我们可以从下图看出,这样的平面不止一个:

      Support Vector Machine (1) : 简单SVM原理

        (图片来自网络,侵删)

  那么哪个平面是最好的呢?那么这里就可以用到最开始由统计学习理论得到的一个等价条件,即使得margin最大的为最优解。现在的问题就是如何将margin表示出来,很明显我们可以用点到直线之间的距离公式来表示。任意一个点到分离平面的距离为|y(x)| / $||\mathbf{w}||$ ,其中$||\mathbf{w}||$暂时我们就当做其欧式平面内的长度。这里我们使用一点小技巧,假设x的标签为t $\epsilon$ {1,-1}。那么如果点在平面上方,则y(x)>0,t=1. |y(x)| = t·y(x);如果点在平面下方(这里的上方下方并不严格),则y(x) < 0,t=-1, |y(x)| = t·y(x) 。那距离公式就可以写为:

           t·y(x) / $||\mathbf{w}||$

  那么margin就是所有点到平面距离中最小的那个,即 min { tn·y(xn) / $||\mathbf{w}||$ }, 那么我们的问题就变为:

          Support Vector Machine (1) : 简单SVM原理

  其中 Φ(x) 就是 x 。回到距离公式,如果我们把 W 和 b 变为 kW 和 kb,那么公式的结果不会变(可以自己验证)。那么如果到平面最近的点的 |y(x)| 为 k, 那么我们可以利用这个性质使得其值为1 。那么这样就得到在其他博客中经常看到的条件中的 1 的由来:

          $t_ny(\mathbf{x}) \geqslant 1$  

  那么如果我们想要解决上面提到的maximize 问题,其实就是使得1 / ||W|| 最小(因为由上面归一化之后,min { tn·y(xn) / ||W|| } 就是 1),那么为了方便,我们优化目标变为使得||W|| 最小。那么定义Lost function:

          $L = 1/2 ||\mathbf{w}||$     $t_ny(\mathbf{x}) \geqslant 1$         

  那么之后就是使用KKT条件将上述问题转化为其的dual representation。KTT条件描述如下:

  假设在某些限制下最小化一个函数f(x),这些限制有等式$h_i(x) = 0$ ( i = 1,2,...,n),也有不等式$g_i(x) <= 0$ ( i = 1,2,...,m)。那么这个最优化问题可以转化为一个对偶问题:

          $\nabla L^{*} = 0$  where  $L^{*} = f(x) + \sum_i\mu_ig_i(x) + \sum_j\lambda_jh_j(x)$

  其中$\mu$满足:

          $\mu_i \geqslant 0$

          $\mu_ig_i(x) = 0$  

  对于SVM中涉及到的最优化问题:

          $L^{*}(\mathbf{w},b,\mathbf{a}) = 1/2 ||\mathbf{w}||^2 - \sum_{n}a_n\{t_n(\mathbf{w}^Tx+b)-1\}$ 

  那么由 $\nabla L^{*} = 0$ 可得 $\mathbf{w} = \sum_na_nt_nx_n$ 和 $\sum_na_nt_n = 0$(分别$\mathbf{w}$和b求导)。把这两个等式代入$L^{*}(\mathbf{w},b,\mathbf{a})$ 得到:

          $L^{*}(\mathbf{a}) = \sum_na_n - 1/2 \sum_n\sum_ma_na_mt_nt_mK(x_n,x_m)$     (1)

  其中用$K(x_n,x_m)$表示两个向量相乘,这个表示也方便后面核函数方法的扩展;$\mathbf{a} 和 \mathbf{t}$ 满足:

          $a_n \geqslant 0$ for n = 1,2,...,N   (2)

          $\sum_na_nt_n = 0$   (3)

  那么式(1),(2),(3) 就是对偶问题的完整描述了。

  有一点我想指出,就是在使用KKT条件时,有一个限制是 an(  tn·y(xn) -1 ) = 0 。但是在dual representation的限制中并没有这个限制。这是因为这个限制太严格了,对解dual representation 并没有帮助。我们也可以看一下这个限制,如果数据n是所有点到平面中距离最小的一个,那么an 就可以不为零;如果不是,那么an就一定要为零。那么由KKT条件,Support Vector Machine (1) : 简单SVM原理n = 0 的点对其都没有贡献。那么只有到平面距离最小的点才对其有贡献,这也是support vector machine的由来,即只有这些点是support vectors。所以SVM的解仅依赖于一小部分数据,这也是其sparse solution的由来。 

  这里我们假设数据集完全可分离,那么如果数据集不完全可分离时,引入一个slack variables ,即soft SVM,也可以完成。此时只需要把对偶问题中$a_n \geqslant 0$ 改为 $ C \geqslant a_n \geqslant 0$ 即可。

  同时SVM也可以实现regression的问题。如果能掌握最简单的SVM,这些扩展问题看起来也不会有多大问题。        

上一篇:hibernate检索方式(HQL 检索方式,QBC 检索方式,本地 SQL 检索方式)


下一篇:QBC检索和本地SQL检索