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

    支持向量机

    核心思想是间隔最大化

    基本形式

    假设划分超平面可以使用下述线性方程来描述:

    [oldsymbol{w}^{mathrm{T}} oldsymbol{x}+b=0 ]

    则样本空间中的任一点到分隔超平面的距离为:

    [r=frac{left|oldsymbol{w}^{mathrm{T}} oldsymbol{x}+b ight|}{|oldsymbol{w}|} ]

    如果超平面能正确分类,则有:

    [left{egin{array}{ll}{oldsymbol{w}^{mathrm{T}} oldsymbol{x}_{i}+b geqslant+1,} & {y_{i}=+1} \ {oldsymbol{w}^{mathrm{T}} oldsymbol{x}_{i}+b leqslant-1,} & {y_{i}=-1}end{array} ight. ]

    两个异类支持向量到分界面的距离之和为:

    [gamma=frac{2}{|oldsymbol{w}|} ]

    所以想要找到最大间隔,就是下述优化函数:

    [egin{array}{l}{max _{oldsymbol{w}, b} frac{2}{|oldsymbol{w}|}} \ { ext { s.t. } y_{i}left(oldsymbol{w}^{mathrm{T}} oldsymbol{x}_{i}+b ight) geqslant 1, quad i=1,2, ldots, m}end{array} ]

    可将上式重新写为:

    [egin{array}{l}{min _{oldsymbol{w}, b} frac{1}{2}|oldsymbol{w}|^{2}} \ { ext { s.t. } y_{i}left(oldsymbol{w}^{mathrm{T}} oldsymbol{x}_{i}+b ight) geqslant 1, quad i=1,2, ldots, m}end{array} ]

    对偶问题

    使用拉格朗日乘子法得到其对偶问题:

    [L(oldsymbol{w}, b, oldsymbol{alpha})=frac{1}{2}|oldsymbol{w}|^{2}+sum_{i=1}^{m} alpha_{i}left(1-y_{i}left(oldsymbol{w}^{mathrm{T}} oldsymbol{x}_{i}+b ight) ight) ]

    通过对 (w)(alpha) 求偏导,得到新的优化函数:

    [max _{oldsymbol{alpha}} sum_{i=1}^{m} alpha_{i}-frac{1}{2} sum_{i=1}^{m} sum_{j=1}^{m} alpha_{i} alpha_{j} y_{i} y_{j} oldsymbol{x}_{i}^{mathrm{T}} oldsymbol{x}_{j} ]

    [egin{array}{l}{s.t. sum_{i=1}^{m} alpha_{i} y_{i}=0} \ {alpha_{i} geqslant 0, quad i=1,2, ldots, m}end{array} ]

    通过求解 (alpha),求解 (w)(b) 可以得出模型:

    [egin{aligned} f(oldsymbol{x}) &=oldsymbol{w}^{mathrm{T}} oldsymbol{x}+b \ &=sum_{i=1}^{m} alpha_{i} y_{i} oldsymbol{x}_{i}^{mathrm{T}} oldsymbol{x}+b end{aligned} ]

    上述过程需要满足 KKT 条件:

    [left{egin{array}{l}{alpha_{i} geqslant 0} \ {y_{i} fleft(oldsymbol{x}_{i} ight)-1 geqslant 0} \ {alpha_{i}left(y_{i} fleft(oldsymbol{x}_{i} ight)-1 ight)=0}end{array} ight. ]

    可以看出对于任意样本 ((x_i,y_i)),均有 (alpha_i=0) 或者 (y_if(x_i)=1),当 (y_if(x_i)=1) 时,该样本为支持向量,最后模型只需要这些支持向量。

    为什么需要对偶形式:

    • 为了自然引入核函数
    • 降低求解复杂度

    求解算法 SMO。

    核函数

    原始样本空间不可分,但是转化到高维可以线性可分。

    (phi(x)) 表示 (x) 映射后的特征向量,于是模型可以表示为:

    [f(oldsymbol{x})=oldsymbol{w}^{mathrm{T}} phi(oldsymbol{x})+b ]

    [egin{array}{l}{min _{oldsymbol{w}, b} frac{1}{2}|oldsymbol{w}|^{2}} \ { ext { s.t. } quad y_{i}left(oldsymbol{w}^{mathrm{T}} phileft(oldsymbol{x}_{i} ight)+b ight) geqslant 1, quad i=1,2, ldots, m}end{array} ]

    其对偶问题是

    [max _{oldsymbol{alpha}} sum_{i=1}^{m} alpha_{i}-frac{1}{2} sum_{i=1}^{m} sum_{j=1}^{m} alpha_{i} alpha_{j} y_{i} y_{j} phileft(oldsymbol{x}_{i} ight)^{mathrm{T}} phileft(oldsymbol{x}_{j} ight) \ ]

    [egin{array}{l} {s.t. quad sum_{i=1}^{m} alpha_{i} y_{i}=0} \ {alpha_{i} geqslant 0, quad i=1,2, ldots, m}end{array} ]

    由于特征空间维度很高,直接计算 (phileft(oldsymbol{x}_{i} ight)^{mathrm{T}} phileft(oldsymbol{x}_{j} ight)) 很困难,可以设想这样一个函数:

    [kappaleft(oldsymbol{x}_{i}, oldsymbol{x}_{j} ight)=leftlanglephileft(oldsymbol{x}_{i} ight), phileft(oldsymbol{x}_{j} ight) ight angle=phileft(oldsymbol{x}_{i} ight)^{mathrm{T}} phileft(oldsymbol{x}_{j} ight) ]

    (x_i)(x_j) 在特征空间的内积等于在原始空间中的通过函数 (kappa(x_i,x_j)) 的内积。

    软间隔和正则化

    当样本线性不可分时,需要对约束进行放缩,即允许部分样本不满足约束:

    [y_{i}left(oldsymbol{w}^{mathrm{T}} oldsymbol{x}_{i}+b ight) geqslant 1 ]

    此时,优化目标写为:

    [min _{oldsymbol{w}, b} frac{1}{2}|oldsymbol{w}|^{2}+C sum_{i=1}^{m} ell_{0 / 1}left(y_{i}left(oldsymbol{w}^{mathrm{T}} oldsymbol{x}_{i}+b ight)-1 ight) ]

    其中 (C>0) 时常数,(l_0) 是0/1损失函数:

    [ell_{0 / 1}(z)=left{egin{array}{ll}{1,} & { ext { if } z<0} \ {0,} & { ext { otherwise }}end{array} ight. ]

    (l_0)非凸、非连续,不易求解。使用替代函数:

    • hinge 损失: (quad ell_{hinge}(z)=max(0,1-z))
    • 指数损失(expontential loss):(quad ell_{exp(z)}=exp(-z))
    • 对数损失(logistic loss):(quad ell_{log}(z)=log(1+exp(-z)))

    三种函数对比图:

    computational graph
    若采用 hinge loss 替代,则函数变为:

    [min _{oldsymbol{w}, b} frac{1}{2}|oldsymbol{w}|^{2}+C sum_{i=1}^{m} max left(0,1-y_{i}left(oldsymbol{w}^{mathrm{T}} oldsymbol{x}_{i}+b ight) ight) ]

    共性模型:
    优化目标中的第一项用来描述划分超平面的间隔大小,另一项 (sum_{i=1}^{m} ellleft(fleft(oldsymbol{x}_{i} ight), y_{i} ight))用来描述在训练集上的误差大小,可写为:

    [min _{f} Omega(f)+C sum_{i=1}^{m} ellleft(fleft(oldsymbol{x}_{i} ight), y_{i} ight) ]

    其中第一项为结构误差,用来描述模型的性质;第二项为经验风险,描述模型与训练集的契合程度。

    支持向量回归 (SVR)

    相当于以 (f(x)) 为中心,构建了一个宽度为 (2epsilon) 的间隔带,若训练样本落入此区间,总被认为是正确的。于是SVR问题可以写成:

    [min _{w, b} frac{1}{2}|w|^{2}+C sum_{i=1}^{m} ell_{c}left(fleft(x_{i} ight)-y_{i} ight) ]

    其中 (ell_{epsilon}) 为不敏感损失函数:

    [ell_{epsilon}(z)=left{egin{array}{ll}{0,} & { ext { if }|z| leqslant epsilon} \ {|z|-epsilon,} & { ext { otherwise }}end{array} ight. ]

    问题

    • 如何将svm变为非线性学习器

      引入核函数

    一个例子

    将线性判别分析进行非线性拓展
    线性判别分析的核心思想是,将数据投影到一条直线上,使得同类投影点尽可能接近,使得异类样本点尽可能远。

    符号:
    数据集 (D={(x_i,y_i)}_{i=1}^m,y_iin{0,1}),令 (X_i,mu_i,Sigma_i)代表第(i)类的集合、均值向量和协方差矩阵。
    优化目标为最大化 (J):

    [egin{aligned} J &=frac{left|oldsymbol{w}^{mathrm{T}} oldsymbol{mu}_{0}-oldsymbol{w}^{mathrm{T}} oldsymbol{mu}_{1} ight|_{2}^{2}}{oldsymbol{w}^{mathrm{T}} oldsymbol{Sigma}_{0} oldsymbol{w}+oldsymbol{w}^{mathrm{T}} oldsymbol{Sigma}_{1} oldsymbol{w}} \ &=frac{oldsymbol{w}^{mathrm{T}}left(oldsymbol{mu}_{0}-oldsymbol{mu}_{1} ight)left(oldsymbol{mu}_{0}-oldsymbol{mu}_{1} ight)^{mathrm{T}} oldsymbol{w}}{oldsymbol{w}^{mathrm{T}}left(oldsymbol{Sigma}_{0}+oldsymbol{Sigma}_{1} ight) oldsymbol{w}} end{aligned} ]

    定义类内散度

    [egin{aligned} mathbf{S}_{w} &=mathbf{Sigma}_{0}+mathbf{Sigma}_{1} \ &=sum_{oldsymbol{x} in X_{0}}left(oldsymbol{x}-oldsymbol{mu}_{0} ight)left(oldsymbol{x}-oldsymbol{mu}_{0} ight)^{mathrm{T}}+sum_{oldsymbol{x} in X_{1}}left(oldsymbol{x}-oldsymbol{mu}_{1} ight)left(oldsymbol{x}-oldsymbol{mu}_{1} ight)^{mathrm{T}} end{aligned} ]

    类间散度

    [mathbf{S}_{b}=left(oldsymbol{mu}_{0}-oldsymbol{mu}_{1} ight)left(oldsymbol{mu}_{0}-oldsymbol{mu}_{1} ight)^{mathrm{T}} ]

    则优化函数可以重新写成

    [J=frac{oldsymbol{w}^{mathrm{T}} mathbf{S}_{b} oldsymbol{w}}{oldsymbol{w}^{mathrm{T}} mathbf{S}_{w} oldsymbol{w}} ]

    假设,我们使用某种映射将样本先映射到一个样本空间,然后执行线性判别分析:

    [h(oldsymbol{x})=oldsymbol{w}^{mathrm{T}} phi(oldsymbol{x}) ]

    学习目标是

    [max _{oldsymbol{w}} J(oldsymbol{w})=frac{oldsymbol{w}^{mathrm{T}} mathbf{S}_{b}^{phi} oldsymbol{w}}{oldsymbol{w}^{mathrm{T}} mathbf{S}_{w}^{phi} oldsymbol{w}} ]

    于是有

    [egin{aligned} hat{oldsymbol{mu}}_{0} &=frac{1}{m_{0}} mathbf{K} mathbf{1}_{0} \ hat{oldsymbol{mu}}_{1} &=frac{1}{m_{1}} mathbf{K} mathbf{1}_{1} \ mathbf{M} &=left(hat{oldsymbol{mu}}_{0}-hat{oldsymbol{mu}}_{1} ight)left(hat{oldsymbol{mu}}_{0}-hat{oldsymbol{mu}}_{1} ight)^{mathrm{T}} \ mathbf{N}&=mathbf{K} mathbf{K}^{mathrm{T}}-sum_{i=0}^{1} m_{i} hat{oldsymbol{mu}}_{i} hat{oldsymbol{mu}}_{i}^{mathrm{T}} end{aligned} ]

    可得

    [max _{oldsymbol{alpha}} J(oldsymbol{alpha})=frac{oldsymbol{alpha}^{mathrm{T}} mathbf{M} oldsymbol{alpha}}{oldsymbol{alpha}^{mathrm{T}} mathbf{N} oldsymbol{alpha}} ]


    硬间隔最大化

    软间隔最大化: 加了惩罚因子

  • 相关阅读:
    Microsoft .NET Custom Errors Not Set(今天公司内审,扫描出了漏洞,要堵住)
    马云向***总理专题汇报:坚持为小企业服务
    用sp_lock诊断SQL Sever的性能问题(数据库管理员不得不看)转的。
    Oracle 10g Audit(审计) 记录登录用户在Oracle中的所有操作(转)
    Oracle基本语法集锦(用到了,收集一下)
    C#中对注册表的操作指南
    生活小知识,生活要认真,驱蚊驱虫驱苍蝇大法
    关于TextBox控件onTextChanged时间激活的问题
    Monitoring connection pooling behavior
    远程共享文件夹的切换访问用户帐号
  • 原文地址:https://www.cnblogs.com/curtisxiao/p/10929407.html
Copyright © 2011-2022 走看看