机器学习之支持向量机(support vector machine)(三):核函数、SMO及Hinge loss

版权声明:转载请注明出处~ https://blog.csdn.net/sinat_31425585/article/details/82730832

    对于线性可分SVM和线性SVM而言,其实默认数据是线性可分,或近似线性可分的。但是实际数据大多数为线性不可分的,因此,为了能够对数据进行准确划分,需要引入一些 tricks(kernal tricks),这就是核函数要做的事情,通过将低维数据映射到维核空间,使得数据在高维核空间可分,进而实现对类别的准确划分,其工作原理如图1所示。

                                                         图1 核函数的工作原理示意图(摘自资料[1])

    一、常见核函数

    1) 多项式核函数:

                                                                 K(\vec{X_{1}},\vec{X_{2}})=(||\vec{X_{1}}-\vec{X_{2}}||^{a}+r)^{b}  

    其中,a,b,r都为常数。

    2) 高斯核函数:

                                                                K(\vec{X_{1}},\vec{X_{2}})=exp(\frac{-||\vec{X_{1}}-\vec{X_{2}}||^{2}}{2\sigma ^{2}})

    3) sigmoid核函数:

                                                              K(\vec{X_{1}},\vec{X_{2}})=tanh(\gamma ||\vec{X_{1}}-\vec{X_{2}}||^{a}+r)

    其中,\gamma ,r, \alpha都为常数。

    核函数具有什么性质?下面这个例子来自于资料[1]。

    假设存在两个数据点\vec{X_{1}}={1,2,3},\vec{X_{2}}={4,5,6},核函数\phi (\vec{X})=(x_{1}^{2},x_{1}x_{2},x_{1}x_{3},x_{2}^{2},x_{2}x_{3},x_{3}x_{1},x_{3}x_{2},x_{3}^{2}),因此有:

                                                                 \phi (\vec{X_{1}})=(1,2,3,2,4,6,3,6,9)

                                                                \phi (\vec{X_{2}})=(16,20,24,20,25,36,24,30,36)

    直接计算有:

                         K(\vec{X_{1}},\vec{X_{2}})=<\phi (\vec{X_{1}}),\phi (\vec{X_{2}})>=16+40+72+40+100+180+72+180+324=1024

    先求<\vec{X_{1}},\vec{X_{2}}>,再做核映射,有:

                                                                    K(\vec{X_{1}},\vec{X_{2}})=(4+10+18)^{2}=1024

    不难发现,我们先将点X1,X2做高维核变换之后再求内积,等价于先对点X1,X2求内积,再做高维核变换。这样做的好处在于,如果先做核变换,再对高维数据求内积,当维度过大时,计算量爆炸,因此,一般采用先在低维上做内积,再将内积值映射到高维。                                      

    二、SMO算法,求解\alpha及决策超平面

    其实不难发现,线性可分SVM为线性SVM的特例,因此,只需要求解线性SVM即可。原问题最大化问题:

                                           \alpha ^{*}=max_{\alpha _{i}} (\sum_{i=0}^{N}\alpha _{i} -\frac{1}{2}\sum_{i=0}^{N}\sum_{j=0}^{N}\alpha _{i}\alpha _{j}y_{i}y_{j}\phi (\vec{X}_{i})^{T}\phi (\vec{X}_{j}))

    可以转换成对应最小化:

                                                    \alpha ^{*}=min_{ \alpha _{i}} (\frac{1}{2}\sum_{i=0}^{N}\sum_{j=0}^{N}\alpha _{i}\alpha _{j}y_{i}y_{j}\phi (\vec{X}_{i})^{T}\phi (\vec{X}_{j}) - \sum_{i=0}^{N}\alpha _{i})

                                                                 s.t. \ \sum_{i=1}^{N}\alpha _{i}y_{i}=0,i=1,2,...,n

                                                                         0\leqslant \alpha _{i} \leqslant C,i=1,2,...,n

    按照前面描述,\phi (\vec{X}_{i})^{T}\phi (\vec{X}_{j})等价于\phi (<\vec{X}_{i},\vec{X}_{j}>),保证和前面核函数描述一致,记为K(\vec{X_{1}},\vec{X_{2}})

                                                         \alpha ^{*}=min_{ \alpha _{i}} (\frac{1}{2}\sum_{i=0}^{N}\sum_{j=0}^{N}\alpha _{i}\alpha _{j}y_{i}y_{j}K(\vec{X_{1}},\vec{X_{2}}) - \sum_{i=0}^{N}\alpha _{i})

                                                                  s.t. \ \sum_{i=1}^{N}\alpha _{i}y_{i}=0,i=1,2,...,n

                                                                         0\leqslant \alpha _{i} \leqslant C,i=1,2,...,n

    SMO(Sequential Minimal Optimization)即序列最小优化,通过固定其中N+2个参数,将原始问题就转换成了求解二元函数问题。

    假设,当前选取的变量为\alpha _{1},\alpha_{2},有:

                                                                         \alpha _{1}y_{1}+\alpha_{2}y_{2}=\sum_{i=3}^{N}\alpha _{i}y_{i}=\zeta

    2.1 边界条件

    这里可以分为两种情况:y_{1},y_{2}同号和y_{1},y_{2}异号。

    2.1.1 y_{1},y_{2}异号

    y_{1},y_{2}异号时有:

    1、y_{1}=1,y_{2}=-1则:  \alpha _{1}-\alpha_{2}=\zeta

    2、y_{1}=-1,y_{2}=1则:  \alpha _{1}-\alpha_{2}=-\zeta

    而0\leqslant \alpha _{1} ,\alpha _{2}\leqslant C,所以y_{1},y_{2}异号时,图像如图2所示。

                     

                                                                                     图2 y_{1},y_{2}异号

    \alpha _{1},\alpha_{2}即要在正方形区域内,又要在直线上,\alpha _{1}可以由\alpha_{2}表示,\alpha_{2}的取值范围为:

                                                           L=max\begin{Bmatrix} 0,- \zeta \end{Bmatrix},H=min\begin{Bmatrix} C,C+ \zeta \end{Bmatrix}

   而L中\alpha _{1}-\alpha_{2}=\zeta,H中\alpha _{1}-\alpha_{2}=-\zeta,有:

                                                  L=max\begin{Bmatrix} 0,\alpha_{2}-\alpha_{1} \end{Bmatrix},H=min\begin{Bmatrix} C, \alpha_{2}-\alpha_{1}+C \end{Bmatrix}    

    2.1.2 y_{1},y_{2}同号

    y_{1},y_{2}同号时,为保证与异号时\zeta符号的一致性,即\zeta\leq 0,有:    

    1、y_{1}=1,y_{2}=1则:  \alpha _{1}+\alpha_{2}=-\zeta

    2、y_{1}=-1,y_{2}=-1则:  \alpha _{1}+\alpha_{2}=\zeta

    而0\leqslant \alpha _{1} ,\alpha _{2}\leqslant C,所以y_{1},y_{2}同号时,图像如图3所示。

                        

                                                                                             图3 y_{1},y_{2}同号

   \alpha _{1},\alpha_{2}即要在正方形区域内,又要在直线上,\alpha_{2}可以\alpha _{1}由表示,\alpha _{1}的取值范围为:

                                                           L=max\begin{Bmatrix} 0,\zeta-C \end{Bmatrix},H=min\begin{Bmatrix} C,-\zeta \end{Bmatrix}

   而L中\alpha _{1}+\alpha_{2}=\zeta,H中\alpha _{1}+\alpha_{2}=-\zeta,有:

                                                  L=max\begin{Bmatrix} 0,\alpha_{2}+\alpha_{1} -C\end{Bmatrix},H=min\begin{Bmatrix} C, \alpha_{2}+\alpha_{1} \end{Bmatrix}   

    最后,求解\alpha有,\alpha取值应该位于区间[L,H],如果求取得到的\alpha超出这个范围,取边界条件,然后进行验证。

    2.2 求解

    由于假定\alpha _{1},\alpha_{2}为变量,其余\alpha _{3}, \alpha _{4},...,\alpha_{N}为常量,求目标函数最小值时,我们只需要考虑包含\alpha _{1},\alpha_{2}的项,则目标函数变为:

                                                                                      \alpha ^{*}=min_{ \alpha _{1},\alpha_{2}} f

                                                         f=\frac{1}{2}K_{11}\alpha _{1}^{2}+\frac{1}{2}K_{22}\alpha _{2}^{2}+K_{12}\alpha _{1}\alpha _{2}y_{1}y_{2}-\alpha _{1}-\alpha _{2}

                                                                     +\alpha _{1}y_{1}\sum_{i=3}^{N}\alpha _{i}y_{i}K_{i1}+\alpha _{2}y_{2}\sum_{i=3}^{N}\alpha _{i}y_{i}K_{i2}

    由假设有:

                                                                           \alpha _{1}y_{1}+\alpha_{2}y_{2}=\sum_{i=3}^{N}\alpha _{i}y_{i}=\zeta

   由于y _{1}*y _{1}=1,两边同时乘以y _{1}有:

                                                                       \alpha _{1}+\alpha_{2}y_{1}y_{2}=y_{1}\sum_{i=3}^{N}\alpha _{i}y_{i}=y_{1}\zeta        

   则:

                                                                              \alpha _{1}=y_{1}(\zeta-\alpha_{2}y_{2})

   令:

                                                                                 v_{j}=\sum_{i=3}^{N}\alpha _{i}y_{i}k_{ij}

    将\alpha _{1}回代到f中有:

                                  f=\frac{1}{2}k_{11}\alpha _{1}^{2}+\frac{1}{2}k_{22}\alpha _{2}^{2}+y_{1}y_{2}\alpha _{1}\alpha _{2}k_{12}-(\alpha _{1}+\alpha _{2})+y_{1}\alpha _{1}v_{1}+y_{2}\alpha _{2}v_{2}

                                                     =\frac{1}{2}k_{11}(\zeta -\alpha _{2}y_{2})^{2}+\frac{1}{2}k_{22}\alpha _{2}^{2}+y_{2}(\zeta -\alpha _{2}y_{2})\alpha _{2}k_{12}

                                                                 -(\alpha _{1}+\alpha _{2})+(\zeta -\alpha _{2}y_{2})v_{1}+y_{2}\alpha _{2}v_{2}

    将f\alpha _{2}求导数并令其为0,有:

                                           (k_{11}-2k_{12}+k_{22})\alpha _{2}=y_{2}(y_{1}-y_{2}+v_{1}-v_{2}-\zeta (k_{11}-k_{12}))

    我们然后用\alpha _{2},\alpha _{2}表示v_{1},v_{2}有:

                                                                   v_{j}=y(x_{j})-\sum_{i=1}^{2}\alpha _{i}y_{i}k_{ij}-b      

    回代到上面式子有:

                                         (k_{11}-2k_{12}+k_{22})\alpha _{2}=y_{2}(y_{1}-y_{2}+ (y(x_{1})-\sum_{i=1}^{2}\alpha _{i}y_{i}k_{i1}-b)-

                                                                    (y(x_{2})-\sum_{i=1}^{2}\alpha _{i}y_{i}k_{i 2}-b) -\zeta (k_{12}-k_{11}))

    定义残差:

                                                                           E_{i}=y(x_{i}) - y_{i}

    则:

                                 (k_{11}-2k_{12}+k_{22})\alpha _{2}=y_{2}(E_{2}-E_{1}-\sum_{i=1}^{2}\alpha _{i}y_{i}k_{i2}+\sum_{i=1}^{2}\alpha _{i}y_{i}k_{i1} -\zeta (k_{12}-k_{11}))

    将\alpha _{1}y_{1}+\alpha_{2}y_{2}=\zeta代入有:

                                       (k_{11}-2k_{12}+k_{22})\alpha _{2}^{new}=(k_{11}-2k_{12}+k_{22})\alpha _{2}^{old}+y_{2}(E_{2}-E_{1})

    两边同时除以两边常量有:

                                                                 \alpha _{2}^{new}=\alpha _{2}^{old}+\frac{y_{2}(E_{2}-E_{1})}{(k_{11}-2k_{12}+k_{22})}

    利用上式,就可以迭代的得到\alpha _{2}^{new},利用\alpha _{2}^{new}\alpha _{1}^{new}之间线性关系,就可以得到\alpha _{1}^{new},终于得到这个递推式子,非常感谢刘建平Pinard的博客[3],终于对照着推出来了。

    最后贴一下SMO的步骤,这两页ppt摘自参考资料[4].。

  

     

     三、Hinge Loss

    求解SVM除了采用SMO来做,还可以采用优化的思路,定义一个误差,使用梯度下降法来进行优化,通过最小化误差项来求解SVM。

        

    参考资料

    [1] 唐宇迪的机器学习课程

    [2] http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html

    [3] https://www.cnblogs.com/pinard/p/6111471.html

    [4] 2016小象学院-机器学习升级版II(邹博)

猜你喜欢

转载自blog.csdn.net/sinat_31425585/article/details/82730832
今日推荐