zoukankan      html  css  js  c++  java
  • 第7章--支持向量机

    感知机对应于分离超平面,将样本划分为正负两类。对于一批训练数据,可能存在多个超平面。支持向量机(support vector machines)就是求得间隔最大的分离超平面。

    (简单一点来吧。讨论线性支持向量机时,不区分书中的输入空间和特征空间。)

    7.1 线性可分支持向量机

    当训练数据线性可分时,通过硬间隔最大化,学习一个线性的分类器,即线性可分支持向量机,又称为硬间隔支持向量机。

    分离超平面对应方程$wx + b = 0$,由法向量$w$和截距$b$决定,可用$(w,b)$表示。


    我们先来回忆一道高中数学题:

    对于平面直角坐标系的一条直线$Ax + By + C = 0$,点$(x_0,y_0)$到该直线的距离$gamma$为:

    egin{align*}
    gamma = frac{left | Ax_0 + By_0 + C ight |}{sqrt{A^2 + B^2}}
    end{align*}

    简单回忆一下这个公式怎么得到的吧。从$(x_0,y_0)$到直线$Ax + By + C = 0$做垂线,假设垂点为$(x_1, y_1)$。则向量$(x_0-x_1,y_0-y_1)$与直线垂直,得到一个方程。另外,$(x_1, y_1)$位于直线上,又得到一个方程。联立这两个方程,即可求出$(x_1, y_1)$,从而得到$gamma$。


    从二维空间推广到n维样本空间,样本点$x_i$($x_i in R^n$)到超平面的距离可以表示为:

    egin{align*}
    gamma_i = frac{left | w cdot x_i + b ight |}{left | w ight |}
    end{align*}

    另外,与感知机相同,$y_i$和$w cdot x_i + b$符号相同,即$left | w cdot x_i + b ight | = y_i(w cdot x_i + b)$,从而有:

    egin{align*}
    gamma_i = frac{y_i(w cdot x_i + b)}{left | w ight |}
    end{align*}

    我们将$gamma_i$称作样本点$x_i$到超平面$wx + b = 0$的几何间隔(geometric margin)。并将$hat{gamma_i} = y_i(w cdot x_i + b)$称为函数间隔(functional margin)。显然,$gamma_i = frac{hat{gamma_i}}{left | w ight |}$。

    对于训练数据集$T$($(x_i,y_i) in T$),定义$T$到超平面的几何间隔、函数间隔如下:

    egin{align*}
    gamma = mathop{min}_{i=1,cdots ,N} gamma_i \
    hat{gamma} = mathop{min}_{i=1,cdots ,N} hat{gamma_i}
    end{align*}


    支持向量机学习的基本想法是求解能够正确划分训练数据集,并且几何间隔最大的分离超平面。

    这个问题可以表述为下面的约束最优化问题:

    egin{align*}
    & mathop{max}limits_{w,b} quad gamma ag{7.9} \
    & s.t. quad y_i(frac{w}{left | w ight |} cdot x_i + frac{b}{left | w ight |}) geq gamma, i=1,2, cdots, N ag{7.10}
    end{align*}

    考虑几何间隔和函数间隔的关系,可以将问题改写为:

    egin{align*}
    & mathop{max}limits_{w,b} quad frac{hat{gamma}}{left | w ight |} ag{7.11} \
    & s.t. quad y_i(w cdot x_i + b) geq hat{gamma}, i=1,2, cdots, N ag{7.12}
    end{align*}

    函数间隔$hat{gamma}$的取值并不影响最优化问题的解。事实上,将$w$和$b$按比例改变为$lambda w$和$lambda b$,这是函数间隔为$lambda hat{gamma}$。函数间隔的这一改变对上面最优化问题的不等式约束没有影响,对目标函数的优化也没有影响,也就是说,它产生一个等价的优化问题。这样,就可以取$hat{gamma} = 1$。将$hat{gamma} = 1$带入上面的最优化问题,注意到最大化$frac{1}{left | w ight |}$和最小化$frac{1}{2} left | w ight | ^ 2$是等价的,于是得到下面的线性可分支持向量机学习的最优化问题:

    egin{align*}
    & mathop{min}limits_{w} quad frac{1}{2} left | w ight | ^ 2 ag{7.13} \
    & s.t. quad y_i(w cdot x_i + b) - 1 geq 0, i=1,2, cdots, N ag{7.14}
    end{align*}

    这是一个凸二次规划(convex quadratic programming)问题。

    如果求出来约束最优化问题(7.13)~(7.14)的解$w^*$、$b^*$,那么就可以得到最大间隔分类超平面$w^* cdot x_i + b^* = 0$及分类决策函数$f(x) = sign(w^* cdot x_i + b^*)$,即线性可分支持向量机模型。


    在线性可分情况下,训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量(support vector)。支持向量是使约束添加(7.14)等号成立的点,即

    egin{align*}
    quad y_i(w cdot x_i + b) - 1 = 0
    end{align*}

    对于$y_i=+1$的正例点,支持向量在超平面$H_1:wx + b = 1$上。对于$y_i=-1$的负例点,支持向量在超平面$H_2:wx + b = -1$上。如图7.3所示:

    图7.3 支持向量

    在决定分离超平面时只有支持向量起作用,而其他实例点并不起作用。支持向量的个数一般很少,所以支持向量机由很少的“重要的”训练样本确定。


    为了求解约束最优化问题(7.13)~(7.14),应用拉格朗日对偶性,通过求解对偶问题,从而得到(7.13)~(7.14)的解。

    首先构造拉格朗日函数。为此,对没有个不等式约束(7.14)引入拉格朗日乘子$alpha_i geq 0, i = 1,2,cdots ,N$,定义拉格朗日函数:

    egin{align*}
    L(w,b,alpha) &= frac{1}{2}left | w ight | ^ 2 - sum_{i=1}^{n} alpha_i(y_i(wx_i + b) - 1) \
    &= frac{1}{2}left | w ight | ^ 2 - sum_{i=1}^{n} alpha_iy_i(wx_i + b) + sum_{i=1}^{n}alpha_i ag{7.18}
    end{align*}

    根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:

    egin{align*}
    mathop{max}limits_{alpha} mathop{min}limits_{w,b} L(w,b,alpha)
    end{align*}

    所以,为了得到对偶问题的解,需要先求$L(w,b,a)$对$w$,$b$的极小,再求对$alpha$的极大。

    (1)、求$mathop{min}limits_{w,b} L(w,b,alpha)$

    将拉格朗日函数$L(w,b,alpha)$分别对w,b求偏导并令其等于0:

    egin{align*}
    abla_w L(w,b,alpha) &= w - sum_{i=1}^{n} alpha_i y_i x_i = 0 \
    abla_b L(w,b,alpha) &= sum_{i=1}^{n} alpha_i y_i = 0
    end{align*}

    egin{align*}
    & w = sum_{i=1}^{n} alpha_i y_i x_i  ag{7.19} \
    & sum_{i=1}^{n} alpha_i y_i = 0  ag{7.20}
    end{align*}

    其中,$w$和$x_i$是向量。

    将(7.19)带入(7.18)得:

    egin{align*}
    L(w,b,alpha) &= frac{1}{2}(sum_{i=1}^{N} alpha_i y_i x_i)^2 - sum_{i=1}^{N}alpha_i y_i((sum_{j=1}^{N}alpha_j y_j x_j) cdot x_i + b) + sum_{i=1}^{N}alpha_i
    end{align*}

    向量乘法是满足分配率的,从而有:

    egin{align*}
    L(w,b,alpha) &= frac{1}{2}sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j(x_i cdot x_j) -
    sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j(x_i cdot x_j)
    -b sum_{i=1}^{N} alpha_i y_i + sum_{i=1}^{N}alpha_i \
    &= -frac{1}{2} sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j(x_i cdot x_j) -b sum_{i=1}^{N} alpha_i y_i + sum_{i=1}^{N}alpha_i \
    end{align*}

    再根据(7.20)可得:

    egin{align*}
    L(w,b,alpha) = -frac{1}{2} sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j(x_i cdot x_j) + sum_{i=1}^{N}alpha_i \
    end{align*}

    (2)、求$mathop{max}limits_{w,b}L(w,b,alpha)$对$alpha$的极大,即如下问题:

    egin{align*}
    mathop{max}limits_{alpha} &-frac{1}{2} sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j(x_i cdot x_j) + sum_{i=1}^{N}alpha_i  ag{7.21} \
    s.t. & sum_{i=1}^{n} alpha_i y_i = 0 \
    & alpha_i geq 0, i=1,2,cdots,N
    end{align*}

    将(7.21)式的目标函数由极大转换成极小,就得到下面与之等价的最优化问题:

    egin{align*}
    mathop{min}limits_{alpha} &frac{1}{2} sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j(x_i cdot x_j) - sum_{i=1}^{N}alpha_i ag{7.22} \
    s.t. & sum_{i=1}^{n} alpha_i y_i = 0  ag{7.23} \
    & alpha_i geq 0, i=1,2,cdots,N  ag{7.24}
    end{align*}

    定理7.2 设$alpha ^ * = (alpha_1^*,alpha_2^*,cdots,alpha_N^*)^{T}$是最优化问题(7.22)~(7.24)的解,则存在下标$j$,是的$alpha_j^* > 0$,并可按下式求得已优化问题(7.13)~(7.14)的解$w^*$,$b^*$:

    egin{align*}
    w^* &= sum_{i=1}^{N}alpha_i^* y_i x_i  ag{7.25} \
    b^* &= y_i - sum_{i=1}^{N}alpha_i^* y_i (x_i cdot x_j)  ag{7.26}
    end{align*}

    证明略,程序员不用管那么多。^_^

    由定理可知,分离超平面可以写成:

    egin{align*}
    sum_{i=1}^{N} a_i^* y_i (x cdot x_i) + b^* = 0 ag{7.29}
    end{align*}

    分类决策函数可以写成:

    egin{align*}
    f(x) = sign(sum_{i=1}^{N} a_i^* y_i (x cdot x_i) + b^*) ag{7.30}
    end{align*}

    这就是说,分类决策函数值依赖于输入x和训练样本输入的内积。(7.30)称为线性可分支持向量机的对偶形式。综上所述,对于给定的线性可分训练数据集,可以首先求对偶问题(7.22)~(7.24)的解$a^*$;再利用(7.25)和(7.26)求得原始问题的解$w^*,b^*$;从而求得分离超平面及分类决策函数。这种算法称为线性可分支持向量机的对偶学习算法,是线性可分支持向量机学习的基本算法。


    7.2 线性支持向量机与软间隔最大化

    在现实问题中,训练数据往往是线性不可分的。

    这就需要修改硬间隔最大化,使其成为软间隔最大化。线性不可分意味着某些样本点$(x_i,y_i)$不能满足函数间隔大于等于1的约束条件(7.14)。为了解决这个问题,可以对每个样本点$(x_i,y_i)$引进一个松弛变量$varepsilon_i geq 0$,使函数间隔加上松弛变量大于等于1。这样,约束条件变为:

    egin{align*}
    quad y_i(w cdot x_i + b) geq 1 - varepsilon_i
    end{align*}

    同时,对每个松弛变量$varepsilon_i$,支付一个代价$varepsilon_i$,目标函数变为:

    egin{align*}
    frac{1}{2} left | w ight | ^ 2 + C sum_{i=1}^{N} varepsilon_i
    end{align*}

    其中,$C > 0$称为惩罚参数。

    线性不可分的线性支持向量机的学习问题变成如下凸二次优化问题(原始问题):

    egin{align*}
    mathop{min}limits_{w,b,varepsilon} quad &frac{1}{2} left | w ight | ^ 2 + Csum_{i=1}^{N} varepsilon_i \
    s.t. quad &y_i(w cdot x_i + b) geq 1 - varepsilon_i, i=1,2, cdots, N \
    &varepsilon_i geq 0, i=1,2, cdots, N \
    end{align*}

    同样可通过求解对偶问题,来得到原始问题的解。推导略。


    7.3 非线性支持向量机与核函数

    有时分类问题是非线性的,这时就需要利用核技巧。
    其基本想法是通过一个非线性变换,将输入空间映射到一个更高维的特征空间。在特征空间中求解线性支持向量机。

  • 相关阅读:
    JVisualVM简介与内存泄漏实战分析
    高并发性能提升和超卖的解决方案
    ehcache应用场景及集群同步(RMI)
    一台机器配置多个tomcat的实践经验
    事务范围数据库读写分离失败
    基于spring的数据库读写分离
    Zookeeper linux下使用
    Zookeeper集群
    Dubbo入门实例(二)
    Zookeeper安装与启动
  • 原文地址:https://www.cnblogs.com/royhoo/p/8416522.html
Copyright © 2011-2022 走看看