zoukankan      html  css  js  c++  java
  • 支持向量机

    支持向量机

    一、线性模型
    图1 线性可分情况

    找一个平面,向上或向下评选移动该平面,使之擦过一些向量,将距离 (d) 定义为此平面的优化量度,使 (d) 尽可能的大,(d) 叫做间距(margin),擦过的向量叫做支持向量(support vectors),即$ B_8$ 和 (A_5)

    设空间有 (N) 个向量 (x_1,x_2,...x_N),它们要么属于 (c_1) 类,要么属于 (c_2) 类。即,

    [y_i = egin{cases} 1,& x_i in c_1 \ -1,& x_i in c_2 end{cases} ]

    • 优化问题

    最小化(Minimize): (frac{1}{2}||omega||^2)

    限制条件(Subject to):(y_i[omega^Tx_i+b]geq 1(i=1,2,...N))

    那么优化问题为什么要最小化 (frac{1}{2}||omega||^2) 呢?首先先了解两个“事实”。

    (1)若 (omega^T+b=0) 表示一个平面,那么 (aomega^T+ab=0)(ain R^+)(正实数) 的情况下表示的平面是同一个平面。

    (2)点 ((x_0,y_0)) 到平面 (omega_1x+omega_2y+b=0) 的距离 (s=frac{|omega_1x_0+omega_2y_0+b|}{sqrt{omega_1^2+omega_2^2}}),那么根据推广可知,向量 (x_0) 到超平面 (omega^Tx+b=0) 的距离为 (d=frac{omega^Tx_0+b}{||omega||}(||omega||=sqrt{omega_x^2+omega_2^2+...+omega_N^2}))

    我们可以用 (a) 去缩放 ((omega,b) ightarrow (aomega,ab)) ,使得 (|omega_*^Tx_0+b_*|=1),那么此时,间隔 (d=frac{1}{||omega||}) ,我们的目的是使得 (d) 尽可能的大,那么根据距离公式,可以使 (||omega||^2) 最小化((frac{1}{2}) 是为了求导方便,没有实际意义)以达到目的。

    扩展:上述优化问题是凸优化问题(也叫二次规划),特点是要么无解,要么只有一个极值。定义为

    (1)目标函数是二次项。

    (2)限制条件是一次项。

    二、非线性模型

    在线性不可分的情况下,优化问题可以写成:

    最小化:(frac{1}{2}||omega||+Csum_{i=1}^{N}delta_i)

    限制条件:(1)(delta_igeq0);(2)(y_i[omega^Tx_i+b]geq 1-delta_i(i=1,2,...,N))

    注意:

    (1)(C)是常数,是事先设定好的,为了平衡权重。(omega,b,delta_i(i=1,2,...,N)) 为待求变量。

    (2)此优化问题(也是凸优化)对任意点集,无论是否线性可分都有解。

    支持向量机处理非线性情况是通过将向量 (x) 映射到高维空间,再用线性方式去分开。通俗的说,在低纬空间线性不可分,那么在高维有很大的概率能够线性可分。例如异或问题是线性不可分的。

    图2 异或问题

    ​ 设 (A=left[egin{matrix} 0\ 0 end{matrix} ight] in c_1 ,quad B=left[egin{matrix} 1\ 1 end{matrix} ight] in c_1 ,quad C=left[egin{matrix} 1\ 0 end{matrix} ight] in c_2 ,quad D=left[egin{matrix} 0\ 1 end{matrix} ight] in c_2) ,让 (x) 通过 (varphi(x)) 变换映射到高维空间。即

    [x=left[ egin{matrix} a\b end{matrix} ight] Longrightarrow varphi(x)=left[egin{matrix} a^2\b^2 \a\b\ab end{matrix} ight] ]

    那么

    [varphi(A)=left[egin{matrix} 0\ 0\0\0\0 end{matrix} ight] in c_1 ,quad varphi(B)=left[egin{matrix} 1\ 1 \1\1\1 end{matrix} ight] in c_1 ,quad varphi(C)=left[egin{matrix} 1\ 0 \1\0\0 end{matrix} ight] in c_2 ,quad varphi(D)=left[egin{matrix} 0\ 1\0\1\0 end{matrix} ight] in c_2 ]

    那么可以找到一组解使其线性可分,即

    [omega_*=left[egin{matrix} -1\-1\-1\-1\6 end{matrix} ight] quad , quad b=1 ]

    代入式子可得如下式子,显然线性可分。

    [omega_*^Tvarphi(A)+b = 1 geq0quad omega_*^Tvarphi(B)+b = 3geq0 quad omega_*^Tvarphi(C)+b = -1 <0 quad omega_*^Tvarphi(D)+b = -1 < 0 ]

    (varphi(x)) 接近无限维度时,线性可分的概率会接近到1,对于此问题,只需要修改 SVM(x)(varphi(x)) 即可。

    最小化:(frac{1}{2}||omega||+Csum_{i=1}^{N}delta_i)

    限制条件:(1)(delta_igeq0);(2)(y_i[omega^Tvarphi(x_i)+b]geq 1-delta_i(i=1,2,...,N))

    (varphi(x)) 这会是一个非常复杂的式子。其实我们不需要知道 (varphi(x)) 的显示表达也可以计算。我们只需要知道一个核函数(kernel function),即 (k(x_1,x_2)=varphi(x_1)^Tvarphi(x_2)) 就可以了。

    • 常用的核函数有如下:
    名称 表达式
    线性核 (k(x_i,x_j)=x_i^Tx_j)
    多项式核 (k(x_i,x_j)=(x_i^Tx_j)^d)
    高斯核 $k(x_i,x_j)=exp(-frac{
    sigmoid核 (k(x_i,x_j)=tanh(eta x^T_ix_j + heta))

    (Mercer's quad Theorem) :核函数 (k(x_1,x_2)) 可拆分为 (varphi(x_1)^T varphi(x_2)) 的充分条件为:对任意函数 (varphi(x)) 满足 :

    [(1)quad k(x_1,x_2)=k(x_2,x_1)(交换律) quad;quad(2)quad forall c_i,x_i(x=1...N),sum_{i=1}^{N}sum_{j=1}^{N}c_ic_jk(x_i,x_j) geq 0(半正定性) ]

    • 原问题(Prime Problem)与对偶问题(Dual Problem)

    (1)原问题:

    最小化(Minimize): (f(omega))

    限制条件(Subject to): (g_i(omega) le 0(i=1,2...K) quad ;quad h_i(omega)=0(i=1,2,...M))

    (2)对偶问题:

    定义:(L(omega,alpha,eta) = f(w)+sum_{i=1}^{K}alpha_ig_i(omega)+sum_{i=1}^{M}eta_i h_i(omega)=f(omega)+alpha^Tg(omega)+eta^Th(omega))

    最大化(Maximize): ( heta(alpha,eta) = inf_{定义域内所有的omega}L(omega,alpha,eta))

    ((inf即求最小值,该式是在alpha,eta 固定下,遍历omega,求最小值))

    限制条件(Subject to): $alpha_i ge 0(i=1,2,...K) $

    (3)定理1:如果 (omega^*) 是原问题的解,而 (alpha^*,eta^*) 是其对偶问题的解,则有 (f(omega^*) ge heta(alpha^*,eta^*))

    证明:

    [egin{aligned} heta(alpha^*,eta^*) & = inf_{定义域内所有的omega}L(omega^*,alpha^*,eta^*)\ &le L(omega^*,alpha^*,eta^*) \ &=f(omega^*)+underbrace{alpha^{*T}}_{ge0} underbrace{g(omega^*)}_{le0}+eta^{*T}underbrace{h(omega^*)}_{=0} \ &le f(omega^*) end{aligned} ]

    (G = f(omega^*) - heta(alpha^*,eta^*) ge0) 叫原问题与对偶问题的间距(Duality Gap)。

    注意:如果 (f(omega^*) = heta(alpha^*,eta^*)),必能推出对于所有的 (i=1-K,alpha_i^* = 0 或 g_i^*(omega^*)=0) ,此为 (KKT) 条件。

    (4)定理2(强对偶定理):如果 (g(omega) = Aomega +b,h(omega) = Comega+d,f(omega)) 为凸函数,则 (f(omega^*) = heta(alpha^*,eta^*)),即间距为0。

    凸函数定义是(forall omega_1,omega_2),有 (f(lambdaomega_1+(1-lambda)omega_2)lelambda f(omega_1)+(1-lambda)f(omega_2) quad lambdain[0,1])

    • 支持向量机(原问题与对偶问题)

    (1)原问题

    最小化:(frac{1}{2}||omega||-Csum_{i=1}^{N}delta_i)

    限制条件:(1)(delta_ile0);(2)(1+delta_i-y_iomega^Tvarphi(x_i)+y_ible 0(i=1,2,...,N))

    (2)对偶问题

    最大化 ( heta(alpha,eta) = inf_{所有 omega,delta_i,b}frac{1}{2}||omega||^2-Csum_{i=1}^{N}delta_i+sum_{i=1}^Neta_idelta_i+sum_{i=1}^Nalpha_i[1+delta_i-y_iomega^Tvarphi(x_i)+y_ib])

    限制条件:(1)(alpha_ige0(i=1,2,...,N));(2)(eta_ige0(i=1,2,...,N))

    现在的待求参数是 (omega ,delta_i ,b),对其求偏导,并等于0处取得最优值。

    [egin{aligned} &frac{partial heta}{partial omega} = omega-sum_{i=1}^{N}alpha_ivarphi(x_i)y_i=0Longrightarrow omega=sum_{i=1}^{N}alpha_ivarphi(x_i)y_i qquad (1) \ &frac{partial heta}{partial delta_i}=-C+eta_i+alpha_i=0Longrightarrow alpha_i+eta_i=C qquad (2) \ &frac{partial heta}{partial b} = -sum_{i=1}^Nalpha_iy_i=0Longrightarrowsum_{i=1}^Nalpha_iy_i =0qquad(3) end{aligned} ]

    把(1)(2)(3)代入后的对偶问题为

    最大化:

    ( heta(alpha,eta)=sum_{i=1}^N-frac{1}{2}sum_{i=1}^Nsum_{j=1}^{N}y_iy_jalpha_ialpha_jvarphi(x_i)^Tvarphi(x_j)=sum_{i=1}^N-frac{1}{2}sum_{i=1}^Nsum_{j=1}^{N}y_iy_jalpha_ialpha_jk(x_i,x_j))

    限制条件:

    (1)(0lealpha_ile C(因为eta_ige0且eta_i=C-alpha_i,所以 alpha_i le C,i=1,2,...,N))

    (2)(sum_{i=1}^{N}alpha_iy_i=0(i=1,2,...,N))

    这也是一个二次规划问题,解此问题时,由于 (varphi(x_i)^Tvarphi(x_j)=k(x_i,x_j)),我们只需要知道核函数,不需要知道 (varphi(x)) 的具体表达。现在我们计算 (omega^Tvarphi(x_i) +b)

    首先计算 (omega^T varphi(x_i)),根据(1)式子可得 (omega^T varphi(x_i) = sum_{j=1}^{N}y_jalpha_jvarphi(x_j)^Tvarphi(x_i)=sum_{j=1}^{N}y_jalpha_jk(x_j,x_i))

    然后算 (b),根据KKT条件,对于所有 (i(i=1,2...N))(alpha_i[1+delta_i-y_iomega^Tvarphi(x_i)+y_ib] = 0)(eta_idelta_i = 0 Longrightarrow(C-alpha_i)delta_i = 0),如果对于某一个 (i,alpha_i ot=0,且alpha_i ot=C),则必有 (delta_i=0(由eta_i ot=0推出))(1+delta_i-y_iomega^Tvarphi(x_i)+y_ib=0(由alpha_i ot=0推出)),因此 (b) 的值为

    [b=frac{1-y_iomega^Tvarphi(x_i)}{y_i} =frac{1-y_isum_{j=1}^Nvarphi_jy_jk(x_i,x_j)}{y_i} ]

    最后,我们可以对测试样本 (x) 进行判断,即

    [ egin{cases} xin c_1 ,如果omega^Tvarphi(x_i) +b=sum_{j=1}^{N}y_jalpha_jk(x_j,x_i)+frac{1-y_isum_{j=1}^Nvarphi_jy_jk(x_i,x_j)}{y_i} ge0 \ xin c_2 ,如果omega^Tvarphi(x_i) +b=sum_{j=1}^{N}y_jalpha_jk(x_j,x_i)+frac{1-y_isum_{j=1}^Nvarphi_jy_jk(x_i,x_j)}{y_i} <0 \ end{cases} ]

  • 相关阅读:
    Linux(实操篇)--- 实用指令-运行级别和找回root密码
    Python使用文件操作实现一个XX信息管理系统的示例
    python解释器安装教程的方法步骤
    python如何使用代码运行助手
    python 识别登录验证码图片功能的实现代码(完整代码)
    python线性插值解析
    python协程 详解
    maxcompute mapjoin
    spark split节点笔记
    安装和配置hadoop
  • 原文地址:https://www.cnblogs.com/zhangyazhou/p/13561934.html
Copyright © 2011-2022 走看看