• 支持向量机数学推导


    引言

    SVM的数学推导真的是我一生的痛,看看觉得很懂,但是过了3秒,就在纠结,为什么可以这样换算?今天早上在看集成学习的时候,讲课的老师一直说SVM、SVM、SVM。。。嗯,没错,我又开始回想SVM的数学推导过程,然后,我的一个早上就这样没了。
    这次趁着刚看完印象深刻,我想将刚厘清的思路写下来。仅包括如何推出最优化问题,后面的推导我打算等看完凸优化课程再记录,推导过程参考林轩田老师教授的《机器学习技法》内容。

    回顾线性分类

    线性分类的分类器表达式为$$
    egin{equation}
    h(x) = sgn(w^Tx + b)
    end{equation}

    [林老师之前讲线性分类时用的是PLA算法,即根据当前分类器是否将所有的点分类正确$(h(x)==y)$。如果有一个点分类错误,那么朝着这个点或偏离这个点更新。算法一直迭代直到所有的点正确分类为止。PLA算法得到的分类器不唯一,仅凭线的初始位置这一个因素便能影响最终的分类器。 但是我们知道最想要的分类器长什么样子。我们希望这个分类器足够"胖",也就是说,这根线变胖的时候,边上的点越迟碰到它越好。 ![](https://img2018.cnblogs.com/blog/1531067/201903/1531067-20190318153933936-964639163.jpg) 显然,看了上面的表述,我们应该知道决定这个超平面长什么样子的数据点只有那么几个,就是那些离超平面更近的点。下面开始将这个问题表述为一个最优化问题。 ### 最优化问题的推导 我们想要寻找的超平面是]

    egin{equation}
    w^Tx + b = 0
    end{equation}

    [对于所有的正例,希望$w^Tx_i + b > 0$;反之,$w^Tx_i + b < 0$。其中,w和b是我们要求的参数。 #### 1.0版本问题 最初的问题可以表述为 ]

    egin{equation}
    mathop{max}limits_{w,b} margin(w,b)
    s.t. 分类器将每一个数据点都分类正确
    margin(w,b) = mathop{min}limits_{i=1,2,...,n}distance(x_i, w, b)
    end{equation}

    [ #### 1.1版本问题 我们定义标签$y=+1/-1$,分别代表正例和负例。那么`分类器将每一个数据点都分类正确`这件事情相当于$y_i(w^Tx_i+b) > 0$,更新一下问题表述: ]

    egin{equation}
    mathop{max}limits_{w,b} margin(w,b)
    s.t. y_i(w^Tx_i+b) > 0
    margin(w,b) = mathop{min}limits_{i=1,2,...,n}distance(x_i, w, b)
    end{equation}

    [ #### 2.0版本问题 $distance$代表每一个数据点到超平面的距离,在这里希望能将它用参数表示出来。假设超平面上的有一个数据点$x^1$,它是个向量。那么对于它来说,显然有]

    egin{equation}
    wTx1 + b = 0
    end{equation}

    [现在超平面外有一点$x^*$,也是向量形式。那么$(x^*-x_1)$是两个向量的相减形式,记为$p$。超平面的法向量为$w$,将$p$往$w$上投影的向量的模就是空间上点$x^*$到超平面的距离。用线性代数学过的知识表述,先求投影向量:]

    egin{equation}
    frac{wTp}{wTw}w = frac{wT(x*-x_1)}{wTw}w=frac{wTx*-wTx_1}{w^Tw}w
    end{equation}

    [又由(5)式,上述的式子再可以表述为 ]

    egin{equation}
    frac{wT(x*-x_1)}{wTw}w=frac{wTx*+b}{wTw}w
    end{equation}

    [好的,**已经求出投影向量,接下来求投影向量的模。**$frac{w^Tx^*+b}{w^Tw}$是个标量,换言之,求(7)这个向量的模得到: ]

    egin{equation}
    frac{|wTx*+b|}{w^Tw}left|w ight|
    end{equation}

    [而$w^Tw$=$left|w ight|^2$,因此最终可以写成:]

    egin{equation}
    distance(x^,w,b) = frac{|wTx+b|}{left|w ight|}
    end{equation}

    [接下来更新问题表述: ]

    egin{equation}
    mathop{max}limits_{w,b} margin(w,b)
    s.t. y_i(w^Tx_i+b) > 0
    margin(w,b) = mathop{min}limits_{i=1,2,...,n}frac{|w^Tx_i+b|}{left|w ight|}
    end{equation}

    [ #### 2.1版本问题 其中,$y_i(w^Tx_i+b) > 0$与$|w^Tx_i+b|$又是等价的,所以问题可以精简为:]

    egin{equation}
    mathop{max}limits_{w,b} margin(w,b)
    s.t. margin(w,b) = mathop{min}limits_{i=1,2,...,n}frac{y_i(w^Tx_i+b)}{left|w ight|}
    end{equation}

    [ #### 3.0版本问题 <font color=red>这一步是最重要的变换了,整个推导过程我一直卡着的点就是这里。</font>我想用我所理解的说一下这个。 1. 超平面$w^Tx+b=0$能将一个空间分为两个部分,将某个向量$x_i$代入$w^Tx+b$中若是得到$>0$或者$<0$说明$x_i$在超平面的某一侧。 2. 将超平面$w^Tx+b=0$的参数$w,b$同时缩放,比如都变大3倍或者都变小3倍,这个超平面是不会变的,它还是处于空间中的那个位置。这一点如果不理解可以在二维空间中划一条线比如$3x_1+2x_2-1=0$,对等式左右乘3得到新的等式仍然表述二维空间的那条线。 3. 上面两个都是前提。虽然对超平面$w^Tx+b=0$的参数$w,b$同时缩放了,超平面还是那个超平面,但是有一点却改变了。就是将某个向量$x_i$代入$w^Tx+b$中计算得到的值。想象一下,这个超平面$3x_1+2x_2-1=0$,现在有一个点(1,2)代入得到值6,但是如果将参数都放大3倍,再将点重新代入计算,得到的值也放大了3倍变为18。 4. 既然参数怎么放大缩小超平面都不会变,那么何不为了方便计算,将$w,b$缩放到特定的值$w^*,b^*$,使得对于那些数据点,有$$egin{equation}mathop{min}limits_{i=1,2,...,n}y_i((w^*)^Tx_i+b^*)=1end{equation}$$这是做得到的,假设数据点中距离超平面的最近的那个点为$x^*$,离超平面的距离为$l$。只要将参数缩放$l$倍,不就满足了(12)式。 这样一来,原来的问题就表述为:]

    egin{equation}
    mathop{max}limits_{w*,b} frac{1}{left|w^ ight|}
    s.t. mathop{min}limits_{i=1,2,...,n} y_i((w*)Tx_i+b^*)=1
    end{equation}

    [为了和原来的形式统一,还是写为]

    egin{equation}
    mathop{max}limits_{w,b} frac{1}{left|w ight|}
    s.t. mathop{min}limits_{i=1,2,...,n} y_i(w^Tx_i+b)=1
    end{equation}

    [ #### 4.0版本问题 这里的约束条件还是有些不友好,能不能将$min$这个条件去掉。第一反应是用以下不等式来替换:]

    egin{equation}
    for (x_i,y_i) in D y_i(w^Tx_i+b)>=1
    end{equation}

    [遗憾的是,两者并不是简单的等价关系,或者说原来的约束条件是能推出(15)的,但是反过来并不行。比如,所有对于所有数据点$mathop{min}limits_{i=1,2,...,n} y_i(w^Tx_i+b)=1.26$,它是满足(15)的,但是推不出原来的约束条件。 但是,我们现在可以证明假如可以求出一组最优参数$w,b$,它必然能满足$mathop{min}limits_{i=1,2,...,n} y_i(w^Tx_i+b)=1$。 **这是为什么?** 设已经求出的最优解为$w_1, b_1$,但是$mathop{min}limits_{i=1,2,...,n} y_i(w_1^Tx_i+b_1)=1.26$。我们可以很肯定的说这组必然不是最优解,因为我们希望优化的目标为$frac{1}{left|w ight|}$,要令其最大。现在取这组最优解时得到目标值为$frac{1}{left|w_1 ight|}$,但是$frac{1}{left|frac{w_1}{1.26} ight|}$显然比$frac{1}{left|w_1 ight|}$更大,因此现在取到的$w_1, b_1$根本不是最优解。最优的参数必然能满足$mathop{min}limits_{i=1,2,...,n} y_i(w^Tx_i+b)=1$. 所以,我们可以放心地用(15)代替原来的约束条件。更新问题表述后变为:]

    egin{equation}
    mathop{max}limits_{w,b} frac{1}{left|w ight|}
    s.t. y_i(w^Tx_i+b) >= 1
    end{equation}

    [#### 4.1版本问题 为了符合凸优化数学问题的通常形式,以及方便后续的计算,最终的问题表述为:]

    egin{equation}
    mathop{min}limits_{w,b} frac{left|w ight|^2}{2}
    s.t. y_i(w^Tx_i+b) >= 1
    end{equation}

    [ 好了,我去看凸优化了。。。]

  • 相关阅读:
    opencv 单应矩阵
    对极约束
    opencv Mat 操作
    两个视角得到世界坐标系
    opencv storage 操作C++
    Python操作mysql数据库
    java——保留一位、两位小数
    数据库 select from 库名 表名 的用法
    python 使用国内镜像下载插件及报错Could not fetch URL https://pypi.org/simple/pywinauto/: There was a problem co解决方法
    pycharm下载第三方库AttributeError: module 'pip' has no attribute 'main'问题解决
  • 原文地址:https://www.cnblogs.com/shayue/p/10552504.html
Copyright © 2020-2023  润新知