zoukankan      html  css  js  c++  java
  • 线性SVM的推导

    线性SVM算法的一般过程

    线性SVM的推导

    超平面方程

    SVM是用来分类的。给定一系列输入数据(n维向量),需要找到一个切分界线(n-1维的超平面),这里假定数据是线性可分的。比如,二维数据的超平面是直线,三维数据的超平面是二维平面。以二维数据为例:

    二维平面的直线一般式:(Ax+By+C=0),可以写成向量的形式:

    [pmatrix {A B}pmatrix {x\y}+C=0 ]

    (vec w=pmatrix {A\B}),(vec x=pmatrix{x\y})(b=C),则有:

    [vec w^T vec x + b = 0 ]

    这里的向量都是列向量。懂线性代数学的请无视~
    将上述公式中向量的维度推广到n维,就得到n维数据的超平面。直观理解就是两个类别的分界。

    functional margin

    functional margin直译是:函数间距。听起来抽象~
    在前面定义的超平面公式基础上,设(f(vec x)=vec w^T vec x + b),则:

    [f(vec x)表示egin{cases} 超平面左侧的数据点, &f(vec x)>0cr 超平面上的数据点, &f(vec x)=0 cr 超平面右侧的数据点, &f(vec x)<0end{cases} ]

    超平面上的点显然是几乎没有的,暂不考虑,剩余的就是两个类别各自的数据点了,分居在超平面两侧。按惯例用(y_i)表示第(i)个类别,这里取:

    [y=sign(f(vec x))=egin{cases}1, f(vec x)<0 cr -1, f(vec x)>0 end{cases} ]

    这里用1和-1而不是0和-1,是为了后续推导方便。(sign(x))是取符号函数。

    好了,终于可以定义functional margin了:

    [hat gamma = y(vec w^Tvec x + b) = yf(vec x) = sign(f(vec x))f(vec x)=|f(vec x)| ]

    (f(vec x))和它的符号相乘,得到的结果始终是正的:(forall vec x, hat gamma > 0)

    geometrical margin

    geometrical margin直译为几何距离,也就是点到超平面的距离,也就是点到直线距离再乘以1或者-1。1和-1分别对应两个分类,也就是分类标签(y)的取值。前面对于(y)值的设定就是为此处考虑的。
    几何距离
    如图,(vec x_0)是超平面上一点,(vec x)是任意一个点。这两个点都是n维向量,先试着计算它们的距离(gamma)

    [gamma=d(vec x, vec x_0)=||vec x - vec x_0|| \ =frac{vec x - vec x_0}{vec e} \ =frac{vec x - vec x_0}{frac{vec w}{||vec w||}} \ =>... ]

    这里的问题在于,使用了向量除法,其中(vec e)表示和(vec x - vec x_0)同方向的单位向量,虽然类似定比分点的公式,但是还是不严格。好在只要稍微转换下书写形式,把除法写成乘法,就OK了:

    [vec x-vec x_0 = gamma vec e =gamma frac{vec w}{||vec w||} \左乘vec w^T: vec w^T(vec x-vec x_0)=gamma frac{vec w^T vec w}{||vec w||} \ 考虑f(vec x_0)=0,f(vec x)=vec w^Tvec x,且frac{vec w^T vec w}{||vec w||}=||vec w|| \因此有: gamma=frac{f(vec x)}{||vec w||} ]

    需要指出的是:这里的(vec x)不一定处在(vec w)所指向的一侧,它也许在相反一侧,因而(gamma)可正可负,所以需要定义一个始终是正值的几何距离,即:根据functional margin来定义geometrical margin:

    [hat gamma=yf(vec x) \ gamma=frac{f(vec x)}{||vec w||} \ => ilde gamma=ygamma = frac{hat gamma}{||vec w||} ]

    注意!这里出现了新变量( ilde gamma),是geometrical margin(hat gamma)则表示functional margin(gamma)则表示向量(vec x)(vec x_0)之间的距离。显然,( ilde gamma)(hat gamma)只相差一个缩放因子(||vec w||),而且他们都是大于0的值。

    最大化几何距离( ilde gamma)

    前面引入了超平面、几何距离等概念。显然超平面上的点其所属类别是模糊的,而当超平面上的点离开超平面,离开的越远,其所属分类就越明晰,也有人称为:当点到超平面的margin越大,分类的confidence越大。总之,要让分类效果明显,就应当设法最大化margin。成千上万的数据点,都去计算margin肯定不行,而且显然只需要考虑距离超平面最近的那些点:这些点就是支持向量,支持向量到超平面的margin是所有点中最小的那一撮,设法最大化它们的margin就能完成最终的分类任务了。

    那么,该最大化哪个margin呢?( ilde gamma)还是(hat gamma)呢?( ilde gamma)表示的是几何距离,直觉上应该选择它。试着考虑其具体表达式:

    [hat gamma=|vec w^Tvec x+b| \ ilde gamma=frac{|vec w^Tvec x+b|}{||vec w||} \ =|frac{vec w^T}{||vec w||}vec x+frac{b}{||vec w||}| ]

    对于一个确定的超平面,(vec w)(b)的取值并不唯一,(||vec w||)可大可小,通过缩放(vec w)(b)能保持超平面不变。但(frac{vec w}{||vec w||})(frac{b}{vec w})是唯一的,因而考虑最大化( ilde gamma)。实际上,不妨取(||vec w||=1),那么等比例缩放(b),就能保持等式成立,而且此时(hat gamma)( ilde gamma)取值相等。

    此时,我们对于训练数据集(S={x^{(i)}, y^{(i)};i=1,...,m}),我们重新定义参数((vec w,b))下的geometrical margin为:

    [gamma=min_{i=1,...,m} gamma^{(i)} ]

    直观理解为:将超平面向1和-1两个类的方向分别移动,最先触碰到的那些点到分界超平面的距离为几何距离(gamma)。而这些最先被触碰到的点,称为支持向量(support vector)。当然,先前处于分界超平面上的点不算。

    进一步确定极值条件

    当前的目标是:

    [max (min d(vec x, vec x_0)) $$,也就是: ]

    max_{gamma,vec w,b} frac {hat gamma}{||vec w||}
    s.t. y_i(vec w^T vec x_i+b) ge gamma, i=1,...,m

    [这里从凸优化的方法,否定了取$||vec w||=1$的做法,采取了让$hat gamma=1$的做法:**支持向量到分解超平面的几何距离为1**。而最小化"支持向量到分界超平面的几何距离",等价于“最小化支持向量之间在垂直于分界超平面的方向上的距离”,也就是: ]

    max Margin = 2/||vec w|| (cond1)

    [同时,现在的情况是:不算分界超平面上的点,所有点满足: $vec w^T vec x_i+b ge 1$,对于所有$y_i=1$ $vec w^T vec x_i+b le -1$,对于所有$y_i=-1$ 也就是: ]

    y_i(vec w^T vec x_i + b)-1 ge 0 (cond2)

    [要满足`cond1`和`cond2`,就能得到最终解。而`cond1`等价于:计算$min ||vec w||^2/2$。 对于不等式约束的条件极值问题,可以用拉格朗日方法求解。而拉格朗日方程的构造规则是:用约束方程乘以非负的拉格朗日系数,然后再从目标函数中减去。于是得到拉格朗日方程如下: ]

    L(vec w,b,alpha_i)=frac{1}{2}||vec w||2-sum_{i=1}{l}alpha_i(y_i(vec w^T vec x_i+b)-1)=frac{1}{2}||vec w||2-sum_{i=1}{l}alpha_i y_i(vec w^T vec x_i+b)+sum_{i=1}^{l}alpha_i

    [其中: ]

    alpha_i ge 0 (4)

    [那么我们要处理的规划问题就变为: ]

    min_{vec w,b} max_{alpha_i ge 0} L(vec w,b,alpha_i) (5)

    [上市才是严格的不等式约束的拉格朗日条件极值的表达式。对于这一步的变换,很多文章都没有多做表述,或者理解有偏差,从而影响了读者后续的推演。在此我将详细地一步步推导,以解困惑。 (5)式是一个凸规划问题,其意义是先对$alpha$求偏导,令其等于0消掉α,然后再对w和b求L的最小值。要直接求解(5)式是有难度的,通过消去拉格朗日系数来化简方程,对我们的问题无济于事。所幸这个问题可以通过拉格朗日对偶问题来解决,为此我们把(5)式做一个等价变换: ]

    min_{vec w, b} max_{alpha_i ge 0} L(vec w,b,alpha_i)= max_{alpha_i ge 0}L(vec w,b,alpha_i)

    [上式即为对偶变换,这样就把这个凸规划问题转换成了对偶问题: ]

    max_{alpha_i ge 0} min_{vec w,b}L(vec w, b, alpha_i) (6)

    [其意义是:原凸规划问题可以转化为先对w和b求偏导,令其等于0消掉w和b,然后再对α求L的最大值。下面我们就来求解(6)式,为此我们先计算w和b的偏导数。由(3)式有: ]

    frac{partial L(vec w,b,alpha_i)}{partial vec w}=vec w-sum_{i=1}^{l}alpha_i y_i x_i
    frac{partial L(vec w,b,alpha_i)}{partial b}=-sum_{i=1}^{l}alpha_i y_i (7)

    [为了让L在w和b上取到最小值,令(7)式的两个偏导数分别为0,于是得到: ]

    vec w=sim_{i=1}^{l}alpha_i y_i x_i
    sum_{i=1}^{l}alpha_i y_i=0 (8)

    [将(8)代回(3)式,可得: ![](http://s5.sinaimg.cn/middle/4298002etbb9440237c94&690) 再把(9)代入(6)式有: ]

    max_{alpha_i ge 0} min_{vec w,b}L(vec w,b,alpha_i)=max_{alpha_i ge 0}=max_{alpha_i ge 0}{sum_{i=1}{l}alpha_i-frac{1}{2}sum_{i=1}{l}sum_{j=1}^{l}alpha_i alpha_j y_i y_j(x_i·x_j)} (10)

    [考虑到(8)式,我们的对偶问题就变为: ]

    max_{alpha_i}{sum_{i=1}{l}alpha_i}-frac{1}{2}sum_{i=1}{l}sum_{j=1}^{l}alpha_i alpha_j y_i y_j(x_i · x_j)
    s.t. sum_{alpha_i}^{y_i}=0
    alpha_i ge 0

    [上式这个规划问题可以直接从数值方法计算求解。 需要指出的一点是,(2)式的条件极值问题能够转化为(5)式的凸规划问题,其中隐含着一个约束,即 ]

    alpha_i(y_i(vec w · x_i + b)-1)=0 (12)

    [这个约束是这样得来的,如果(2)和(5)等效,必有: ]

    max_{alpha_i ge 0}L(vec w, b, alpha_i) = frac{1}{2}||vec w||^2

    [把(3)式代入上式中,得到: ![](http://s2.sinaimg.cn/middle/4298002etbb945ba1a291&690) 化简得到: ]

    min_{alpha_i ge 0}{sum_{i=1}^{l}alpha_i (y_i(vec w · x_i + b)-1)}=0 (13)

    [又因为约束(1)式和(4)式,有: ![](http://s5.sinaimg.cn/middle/4298002etbb945bad05f4&690) 所以要使(13)式成立,只有令:$alpha_i(y_i(vec w·x_i + b)-1) = 0$,由此得到(12)式的约束。该约束的意义是:如果一个样本是支持向量,则其对应的拉格朗日系数非零;如果一个样本不是支持向量,则其对应的拉格朗日系数一定为0。由此可知大多数拉格朗日系数都是0。 一旦我们从(11)式求解出所有拉格朗日系数,就可以通过(8)式的 ]

    vec w=sum_{i=1}^{l}alpha_i y_i x_i

    [计算得到最优分割面H的法向量w。而分割阈值b也可以通过(12)式的约束用支持向量计算出来。这样我们就找到了最优的H1和H2,这就是我们训练出来的SVM。 ## 参考 [支持向量机: Maximum Margin Classifier](Maximum Margin Classifier](http://blog.pluskid.org/?p=632) [支持向量机(SVM)的详细推导过程及注解(一)](http://blog.sina.com.cn/s/blog_4298002e010144k8.html)]

    Greatness is never a given, it must be earned.
  • 相关阅读:
    WeX5开发指南
    移动web app开发框架
    [转]10款 Web 开发常备工具
    为兴趣求职:如何学习UI框架,请将你的看法观点写在评论下面
    10 个顶尖的 Linux 开源人工智能工具
    【转】编写Chrome扩展程序
    HDOJ 4455 Substrings 递推+树状数组
    iOS开发人员:事实上你还有非常多东西须要学
    鸡肋的JdbcRDD
    OFbiz实体引擎
  • 原文地址:https://www.cnblogs.com/zjutzz/p/4621354.html
Copyright © 2011-2022 走看看