一步步进行SVM公式推导之间隔

看着Peter在《机器学习》中给出的SVM分类公式表示一脸懵逼,便决定了用自己的语言来对这些公式进行一次推导完成实验报告的同时,也算是为了以后如果忘了推导过程,可以马上翻出来看看。正所谓SVM有三宝:间隔,对偶和技巧。那么接下来我会对这三个关键词说说我的理解。

SVM的中心思想

        首先来说SVM是怎么进行分类的呢?其实简单的理解话就是划一条线将两个类分开,这条线也就是我需要利用SVM求得。我们就拿二维的来举个栗子,如图所示,可以分割开这两个类的分割线数不胜数,那么哪一条先才是最优的呢?我们应该怎么定义它的好坏呢?首先我们来看看l3这条分割线,由图可以看出,它离A,B两点都很近。如果这个时候来了一个测试数据C,C刚好也在B附近,但是C完全有可能出现在在l3上面(因为B和l3挨着也很近),这样的话C就会被归类到A类。显然这不是我们所希望的,所以找到鲁棒性最好的那条线,间隔最大的那条线。

         

     总结一下:现在是二维的情况,那么三维,四维.....呢,这个时候分割他们的就不再是一条线了,而是一个超平面。而SVM的目的就是为了寻找一个满足分类要求的超平面,并且使训练集中的数据点尽量的远离这个超平秒即间隔最大(能达到一个更好的容噪效果)

间隔

硬间隔目标函数的初始建立

    接下来会出现大量的推导公式,如果您仅仅是为了了解一下SVM远离的话,可以直接跳过中间推导,直接到最后的结论。如果自己学过高数,线代的话,我觉得大家可以跟着思路推导一下。

     Step1:建立超平面公式

     为了求超平面,自然需要超平面的公式。就像高中的时候求一条直线,我们需要先假设这条直线为y=kx+b,然后再把具体的点带入得到具体的相关系数。那么超平面等公式应该怎么求呢?我们还是先看到上图,上图的超平面其实就是一条直线,那么我们同样可以得到这个超平面的公式为w^{T}x+b=0。(大家看到这个w^{T}x+b是不是很熟悉,没错其实这就是逻辑回归里面的z。其实我觉得他们的思想其实是一样的,逻辑回归里面把z>0和z<0分成了两类,而这里同样。当然他们其实在处理的时候还是有区别,这个最后来说)

       好,现在我们已经完成了第一步,超平面公式的建立为

                                                  f(w)=w^{T}x+b                                            公式  1

     step2:求第i个训练样本与超平面的函数距离

                                                \mathop {{\gamma ^i}}\limits^ \wedge = {y^i}({w^T}x + b) = \left| {{w^T}x + b} \right|                       公式 2

                 首先说这个距离是怎么来的呢?其实很简单就是初中的点到面的距离公式推出来的,如果一直ax+by+c=0,求(x1,x2)与该面的距离,则距离公式为:

                                                 dis = \frac{{\left| {a{x_1} + b{x_2} + c} \right|}}{{\sqrt {{a^2} + {b^2}} }}             

                由于分母相同,所以我们可以直接忽略,进而得到公式2,这里为了把绝对值和模这两个符号分开,以后就都用||x||表示x向量的模,因此得到函数距离为:

                                                 \mathop {{\gamma ^i}}\limits^ \wedge = {y^i}({w^T}x + b) = \left\| {{w^T}x + b} \right\|                      公式3

      step3:因此所有间隔中最近的间隔为

                                                   \mathop \gamma \limits^ \wedge = \mathop {\min }\limits_{i = 1...N} \mathop {{\gamma ^i}}\limits^ \wedge                                                     公式4

      step4:寻找几何间隔

                这个函数间隔又是个什么鬼东西呢?是这样的\mathop \gamma \limits^ \wedge其实是一个数值,也就是说普通的函数间隔,现在我们需要把它转换成函数间隔(也就是把向量给加进去)。为什么要转换成几何间隔,后面再说。

                  

             如图所示,At为A在l2上的投影,也就是说\overrightarrow {A{A_t}}向量为超平面的法向量,这是At的坐标怎么求呢?由高中立体几何的知识可以得到\overrightarrow {OA} + \overrightarrow {A{A_t}} = \overrightarrow {O{A_t}}\overrightarrow {O{A}}好求,因为就是训练集中A的坐标,那么\overrightarrow {A{A_t}}应该怎么求呢?其实我们可以把它分成两部分即距离乘以单位向量。距离其实就是我们之前求得函数距离,那么单位向量呢?

            其实单位向量就是超平面的法向量,又因为w和超平面的法向量平行,也就是说单位向量可以用\frac{w}{{\left\| w \right\|}}得到。那么为什么w垂直于超平面呢?这里又涉及到了高中的立体几何知识。因为

                                                \left\{ \begin{array}{l} {w^T}{x_1} + b = 0\\ {w^T}{x_2} + b = 0 \end{array} \right.

           可得{\rm{w(}}{x_1} - {x_2}{\rm{) = 0}}(其实就是二式相减得到的),因此w垂直与一个向量,然后同理再找一个向量并能够证明得到w垂直于x1,x2所在的超平面了。

         总结一下就是

                                                     \begin{array}{l} \overrightarrow {OA} = {x^i}\\ \overrightarrow {A{A_t}} = - {\gamma ^i} * \frac{w}{{\left\| w \right\|}}\\ \overrightarrow {OA} + \overrightarrow {A{A_t}} = \overrightarrow {O{A_t}} = {x^i} - {\gamma ^i} * \frac{w}{{\left\| w \right\|}} \end{array}                             公式5

step5:将公式5带入公式2得到

                                                      {w^T}({x^i} - \mathop {{\gamma ^i}}\limits^ \wedge * \frac{w}{{\left\| w \right\|}}) + b = 0                                         公式6

step6:化简等式6得到几何间隔

                                                   {\gamma ^i} = \frac{{{w^T}{x^i} + b}}{{\left\| w \right\|}} = {\left( {\frac{w}{{\left\| w \right\|}}} \right)^T}.{x^i} + \frac{b}{{\left\| w \right\|}}                         公式7

                             由上式可以看出几何间隔与函数间隔之间的关系为:

                                                              \gamma = \frac{{\mathop \gamma \limits^ \wedge }}{{\left\| w \right\|}}

综上:整个训练集的几何间隔为

                                                             \gamma = \mathop {\min }\limits_{i = 1,..N} {\gamma ^i}                                                        公式8

好了到此,整个硬间隔的模型已经完成。那么现在我们重新回答一下之前那个问题:

为什么在有了函数间隔的情况下,还要定义几何间隔呢?

              我们还是用二维来说,如果分割线为0=2x+1+y和0=4x+2+2y其实是同一个超平面,但是如果我们把它带入公式2(函数距离)中会发现,如果w和b同时增大n倍,那么函数距离也会随之增大。这就是几何间隔引入的原因。从公式7就可以看出,w,b如果同时增大,几何间隔会保持不变。(因为分母除了一个w的模)

step7:目标函数的建立

             现在我们已经知道了每个点与超平面的几何间隔,那么我们的目标是什么呢?当然是使这些函数距离中的最小的那个距离尽可能大。(因为最小的距离都很大了,那么其他的距离就更大了)

因此可以得到目标函数为:

                                                     \begin{array}{l} \max \gamma \\ st.{\rm{ }}{{\rm{y}}^i}\left( {{{\left( {\frac{w}{{\left\| w \right\|}}} \right)}^T}.{x^i} + \frac{b}{{\left\| w \right\|}}} \right) \ge \gamma \end{array}                                 公式9

约束条件表示的意思是:γ是最小的,其他的距离都比他大

然后我们将公式9在进行一次化解,利用公式7,8

得到目标函数:

                                                   \begin{array}{l} \max \frac{{\mathop \gamma \limits^ \wedge }}{{\left\| w \right\|}}\\ st.{\rm{ }}{{\rm{y}}^i}({w^T}{x^i} + b) \ge \mathop \gamma \limits^ \wedge {\rm{ i = 1}}..{\rm{N}} \end{array}                                  公式10

这个公式就是Peter给的那个公式:

                                                   max \left( {\mathop {\min }\limits_{i = 1,..N} {y^i}\left( {\frac{{{w^T}{x^i} + b}}{{\left\| w \right\|}}} \right)} \right)

那么到底点和超平面之间至少应该相差多远呢?这里我们就假设至少相差1.(可根据不同情况改变),所以化简式子为:

                                                   \begin{array}{l} \max \frac{1}{{\left\| w \right\|}}\\ st.{\rm{ }}{{\rm{y}}^i}({w^T}{x^i} + b) \ge 1{\rm{ i = 1}}..{\rm{N}} \end{array}                                   公式11

其实公式11还存在一定的物理意义,如下图:

 

也就是在原来的一个超平面的基础上增添了两个超平面,这两个超平面

{x^i}属于类别1时:

                                {w^T}{x^i} + b1 \ge 1

{x^i}属于类别2时:

                                {w^T}{x^i} + b \le - 1

                            

综上:将公式11转换一下得到目标函数:

                                  \begin{array}{l} \min \frac{1}{2}{\left\| w \right\|^2}\\ st.{\rm{ }}{{\rm{y}}^i}({w^T}{x^i} + b) \ge 1 \end{array}                                公式12

  好的到这里位置,整个SVM的目标函数就建立完了,但是没有得到Peter给的那个最后那个公式,那么他给的最后那个公式又是怎么回事呢?那就得看看对偶和技巧了

对偶: