支持向量机——机器学习(周志华)

news/2024/7/7 13:39:01

支持向量机

间隔与支持向量

在这里插入图片描述

给定训练样本集D={(x1,y1),(x2,y2),...,(xm,ym)},yi∈{−1,+1}D = \{(\bm{x_1},y_1), (\bm{x_2},y_2),..., (\bm{x_m},y_m)\}, y_i \in \{-1, +1\}D={(x1,y1),(x2,y2),...,(xm,ym)},yi{1,+1},分类学习最基本得想法就是基于训练集D在样本空间中找到一个划分超平面,将不同得类别分开。这个超平面对于样本得局部扰动“容忍性最好”。

  • 划分超平面可以通过以下线性方程表示:
    ωTx+b=0\bm{\omega^Tx} + b = 0ωTx+b=0

ω=(ω1,ω2,...,ωd)\bm{\omega} = (\omega_1,\omega_2,...,\omega_d)ω=(ω1,ω2,...,ωd)为法向量,决定了超平面得方向;b为位移项,决定了超平面与远点之间的距离

  • 样本空间任意衣点x\bm{x}x到超平面的距离可写为:
    r=∣ωTx+b∣∣∣ω∣∣r = \frac{|\bm{\omega^Tx} + b|}{||\bm{\omega} ||}r=ωωTx+b

  • 假设超平面能将训练样本正确分类,即对于(xi,yi)∈D(\bm{x_i},y_i)\in D(xi,yi)D,若yi=+1y_i = +1yi=+1,则有ωTxi+b&gt;0\bm{\omega^Tx_i} + b &gt; 0ωTxi+b>0;若yi=−1y_i = -1yi=1,则有ωTxi+b&lt;0\bm{\omega^Tx_i} + b &lt; 0ωTxi+b<0;令
    {ωTxi+b≤−1,yi=−1;ωTxi+b≥+1,yi=+1;\{_{\bm{\omega^Tx_i} + b \le -1, \quad y_i = -1;}^{\bm{\omega^Tx_i} + b \ge +1, \quad y_i = +1;}{ωTxi+b1,yi=1;ωTxi+b+1,yi=+1;

  • 距离超平面最近的这几个训练样本点使上式等号成立,他们被称为“支持向量”,两个异类支持向量到超平面的距离之和为"间隔":
    γ=2∣∣ω∣∣\gamma = \frac{2}{||\bm{\omega}||}γ=ω2
    在这里插入图片描述

  • 找到最大间隔,就是:
    max⁡ω,bγ=2∣∣ω∣∣s.t.yi(ωTxi+b)≥1,i=1,2,...,m. \max \limits_{\bm{\omega},b} \quad \gamma = \frac{2}{||\bm{\omega}||} \\ s.t. \quad y_i(\bm{\omega^Tx_i} + b ) \ge 1, i=1,2,...,m. ω,bmaxγ=ω2s.t.yi(ωTxi+b)1,i=1,2,...,m.
    或者
    min⁡ω,b12∣∣ω∣∣2s.t.yi(ωTxi+b)≥1,i=1,2,...,m. \min \limits_{\bm{\omega},b} \quad \frac{1}{2}||\bm{\omega}||^2 \\ s.t. \quad y_i(\bm{\omega^Tx_i} + b ) \ge 1, i=1,2,...,m. ω,bmin21ω2s.t.yi(ωTxi+b)1,i=1,2,...,m.
    这就是支持向量机(SVM)的基本型。

对偶问题

  • 对于上面的公式,使用拉格朗日乘子法可得到其“对偶问题”,对上式的每条约束添加拉格朗日乘子αi≥0\alpha_i \ge 0αi0,该问题的拉格朗日函数可写为:
    L(ω,b,α)=12∣∣ω∣∣2+∑i=1mαi(1−yi(ωTxi+b))L(\bm{\omega}, b,\bm{\alpha}) = \frac{1}{2} ||\bm{\omega}||^2 + \sum_{i=1}^m \alpha_i(1-y_i(\bm{\omega^Tx_i} + b))L(ω,b,α)=21ω2+i=1mαi(1yi(ωTxi+b))
  • ω\bm{\omega}ω和b求偏导可得:
    ω=∑i=1mαiyixi0=∑i=1mαiyi \bm{\omega} = \sum_{i=1}^{m}\alpha_iy_i\bm{x_i} \\ 0 = \sum_{i=1}^{m}\alpha_iy_i ω=i=1mαiyixi0=i=1mαiyi
  • 带入可得对偶问题:
    max⁡α∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxjs.t.∑i=1mαiyi=0αi≥0,i=1,2,...,m. \max \limits_{\bm{\alpha}} \quad \sum_{i=1}^{m}\alpha_i - \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_j\bm{x_i^Tx_j} \\ s.t. \quad \sum_{i=1}^{m}\alpha_iy_i = 0 \\ \alpha_i \ge 0, i = 1,2,...,m. αmaxi=1mαi21i=1mj=1mαiαjyiyjxiTxjs.t.i=1mαiyi=0αi0,i=1,2,...,m.
  • 解出α\bm{\alpha}α,求出ω和b\bm{\omega}和bωb即可得到模型:
    f(x)=ωTx+b=∑i=1mαiyixiTx+bf(\bm{x}) = \bm{\omega^Tx} + b = \sum_{i=1}^{m}\alpha_iy_i\bm{x_i^Tx} + bf(x)=ωTx+b=i=1mαiyixiTx+b
  • 上述过程需要满足KKT条件
    {ai≥0;yif(xi)−1≥0;α(yif(xi)−1)=0; \begin{cases} a_i \ge 0; \\ y_if(\bm{x_i}) - 1 \ge 0; \\ \alpha(y_if(\bm{x_i}) - 1) = 0; \end{cases} ai0;yif(xi)10;α(yif(xi)1)=0;

对任意样本(xi,yi)(\bm{x_i},y_i)(xi,yi)总有αi=0或者yif(xi)=1\alpha_i = 0 或者 y_if(\bm{x_i}) = 1αi=0yif(xi)=1,若αi=0\alpha_i = 0αi=0,则该样本将不会在求和中出现,也就不会对f(x)f(x)f(x)有任何影响,若α&gt;0\alpha &gt; 0α>0,则必有yif(xi)=1y_if(\bm{x_i}) = 1yif(xi)=1,所对应的样本点位于最大间隔的边界上,是一个支持向量。这就是一个支持向量机的重要性质:训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。

如何求解问题呢?这是个二次规划问题,可使用二次规划算法来求解,然而问题的规模正比于训练样本数,这会在实际任务中造成很大的开销。于是可以使用SMO(Sequential Minimal Optimization)算法.

SMO(Sequential Minimal Optimization)算法的基本思路,先固定αi\alpha_iαi以外所有参数,然后求αi\alpha_iαi上的极值,由于存在约束∑i=1mαiyi=0\sum_{i=1}^{m}\alpha_iy_i = 0i=1mαiyi=0,若固定αi\alpha_iαi之外的其他变量,则αi\alpha_iαi可由其他变量导出,于是SMO每次选择两个变量αi和αj\alpha_i和\alpha_jαiαj,并固定其他的变量,这样,在参数初始化后,SMO不断执行这个两个步骤。

  • 选取一对需要更新的变量αi和αj\alpha_i和\alpha_jαiαj
  • 固定αi和αj\alpha_i和\alpha_jαiαj以外的参数,求解获得更新后的αi和αj\alpha_i和\alpha_jαiαj

SMO采用了一个启发式:使选取的两个变量对应样本之间的间隔变大,直观解释是,这样的两个变量有很大的区别,与两个相似的变量进行更新相比,对它们进行更新会带给目标函数值更大的变化。

  • SMO算法之所以高效,恰是由于固定其他参数后,仅优化两个参数的过程能做到非常高效,具体来说,仅考虑αi和αj\alpha_i和\alpha_jαiαj时,约束条件可重写为:
    αiyi+αjyj=c\alpha_iy_i + \alpha_jy_j = cαiyi+αjyj=c

c=−∑k≠i,jαkykc = -\sum \limits_{k\ne i,j}\alpha_ky_kc=k̸=i,jαkyk,用上式消去αj\alpha_jαj,得到一个关于αi\alpha_iαi的单变量二次规划问题,仅有的约束条件时αi≥0\alpha_i \ge 0αi0

  • 确定偏移项b,对于任意的支持向量(xs,ys)都有ysf(xs)=1(\bm{x_s}, y_s)都有y_sf(\bm{x_s}) = 1(xs,ys)ysf(xs)=1:
    ys(∑i∈SαiyixiTxs+b)=1y_s(\sum_{i\in S }\alpha_iy_i\bm{x_i^Tx_s} + b) = 1ys(iSαiyixiTxs+b)=1
    b=1∣S∣∑s∈S(1ys−∑i∈SαiyixiTxs)b = \frac{1}{|S|}\sum \limits_{s \in S} (\frac{1}{y_s} - \sum_{i\in S }\alpha_iy_i\bm{x_i^Tx_s} )b=S1sS(ys1iSαiyixiTxs)

核函数

当遇到线性不可分的样本时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分,令ϕ(x)\phi(\bm{x})ϕ(x)表示将x映射后的特征向量,则模型变为:
f(x)=ωTϕ(x)+b\bm{f(x) = \omega^T\phi({x})} + bf(x)=ωTϕ(x)+b
min⁡ω,b12∣∣ω∣∣2s.t.yi(ωTϕ(xi)+b)≥1,i=1,2,...,m. \min \limits_{\bm{\omega},b} \quad \frac{1}{2}||\bm{\omega}||^2 \\ s.t. \quad y_i(\bm{\omega^T\phi({x_i})} + b ) \ge 1, i=1,2,...,m. ω,bmin21ω2s.t.yi(ωTϕ(xi)+b)1,i=1,2,...,m.

  • 其对偶问题
    max⁡α∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjϕ(xi)Tϕ(xj)s.t.∑i=1mαiyi=0αi≥0,i=1,2,...,m. \max \limits_{\bm{\alpha}} \quad \sum_{i=1}^{m}\alpha_i - \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_j\bm{\phi({x_i})^T\phi({x_j})} \\ s.t. \quad \sum_{i=1}^{m}\alpha_iy_i = 0 \\ \alpha_i \ge 0, i = 1,2,...,m. αmaxi=1mαi21i=1mj=1mαiαjyiyjϕ(xi)Tϕ(xj)s.t.i=1mαiyi=0αi0,i=1,2,...,m.
  • 求解涉及到计算ϕ(xi)Tϕ(xj)\bm{\phi({x_i})^T\phi({x_j})}ϕ(xi)Tϕ(xj),样本映射到特征空间之后的内积,由于特征空间的维数可能很高,甚至是无穷维,因此直接计算时困难的,于是出现了核函数:
    k(xi,yi)=&lt;ϕ(xi),ϕ(xj)&gt;=ϕ(xi)Tϕ(xj)k(\bm{x_i, y_i}) = &lt;\bm{\phi({x_i}),\phi({x_j})}&gt; = \bm{\phi({x_i})^T\phi({x_j})}k(xi,yi)=<ϕ(xi),ϕ(xj)>=ϕ(xi)Tϕ(xj)

xi\bm{x_i}xiyi\bm{y_i}yi在特征空间的内积等于他们在原始样本空间中通过函数k(.,.)k(.,.)k(.,.)计算的结果

  • 于是
    max⁡α∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjk(xi,xj)s.t.∑i=1mαiyi=0αi≥0,i=1,2,...,m. \max \limits_{\bm{\alpha}} \quad \sum_{i=1}^{m}\alpha_i - \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jk(\bm{x_i, x_j}) \\ s.t. \quad \sum_{i=1}^{m}\alpha_iy_i = 0 \\ \alpha_i \ge 0, i = 1,2,...,m. αmaxi=1mαi21i=1mj=1mαiαjyiyjk(xi,xj)s.t.i=1mαiyi=0αi0,i=1,2,...,m.
  • 求解后得到
    f(x)=ωTϕ(x)+b=∑i=1mαiyiϕ(xi)Tϕ(xj)+b=∑i=1mαiyik(xi,xj)+b \bm{f(x) = \omega^T\phi({x})} + b \\ = \sum_{i=1}^{m}\alpha_iy_i\bm{\phi({x_i})^T\phi({x_j})} + b \\ = \sum_{i=1}^{m}\alpha_iy_ik(\bm{x_i, x_j}) + b f(x)=ωTϕ(x)+b=i=1mαiyiϕ(xi)Tϕ(xj)+b=i=1mαiyik(xi,xj)+b

常用的核函数

名称表达式参数
线性核k(xi,xj)k(\bm{x_i, x_j})k(xi,xj)
多项式核k(xi,xj)k(\bm{x_i, x_j})k(xi,xj)d≥1d \ge 1d1为多项式次数
高斯核k(xi,xj)k(\bm{x_i, x_j})k(xi,xj)σ&gt;0\sigma &gt; 0σ>0为高斯核的带宽
拉普拉斯核k(xi,xj)k(\bm{x_i, x_j})k(xi,xj)σ&gt;0\sigma &gt; 0σ>0
Sigmod核k(xi,xj)k(\bm{x_i, x_j})k(xi,xj)tanhtanhtanh为双面正切函数,β&gt;0,θ&lt;0\beta &gt; 0, \theta &lt; 0β>0,θ<0

此外也可以通过函数组合得到。

软间隔和正则化

现实任务中往往很难确定一个合适的核函数使得训练样本在特征空间中线性可分,即使找到了某个核函数使训练集在特征空间中线性可分,也很难断定线性可分的结果不是由于过拟合所造成的。缓解该问题的一个办法就是允许支持向量机在一些样本上出错,就是"软间隔"的概念,所有样本都必须划分正确,这成为"硬间隔"。

  • 软间隔允许某些样本不满足约束条件:
    yi(ωTxi+b)≥1y_i(\bm{\omega^T{x_i}} + b ) \ge 1yi(ωTxi+b)1
  • 在最大化间隔的同时,不满足约束条件的样本应尽可能地少,优化目标可写:
    min⁡ω,b12∣∣ω∣∣2+C∑i=1mℓ0/1(yi(ωTxi+b)−1) \min \limits_{\bm{\omega}, b} \quad \frac{1}{2} ||\bm{\omega}||^2 + C\sum_{i=1}^m \ell_{0/1}(y_i(\bm{\omega^Tx_i} + b)-1) ω,bmin21ω2+Ci=1m0/1(yi(ωTxi+b)1)

CCC是一个常数,ℓ0/1\ell_{0/1}0/1是“0/1损失函数”
ℓ0/1(z)={1,ifz&lt;0;0,otherwise \ell_{0/1}(z)= \begin{cases} 1, &amp; if \quad z &lt; 0; \\ 0, &amp; otherwise \end{cases} 0/1(z)={1,0,ifz<0;otherwise
CCC无穷大时,迫使上式所有样本均满足约束,等价于硬间隔,当CCC取值有限时,允许一些样本不满足约束
ℓ0/1\ell_{0/1}0/1非凸、非连续,数学性质不太好,经常会用一些函数代替ℓ0/1\ell_{0/1}0/1,称为“替代损失函数”。
下图给了三种替代损失函数:

  • hinge损失:ℓhinge=max(0,1−z)\ell_{hinge} = max(0,1-z)hinge=max(0,1z)
  • 指数损失(exponential loss):ℓexp=exp(−z)\ell_{exp} = exp(-z)exp=exp(z)
  • 对率损失(logistic loss):ℓlog=log(1+exp(−z))\ell_{log} = log(1 + exp(-z))log=log(1+exp(z)) 在这里插入图片描述
  • 采用hinge损失,则变成:
    min⁡ω,b12∣∣ω∣∣2+C∑i=1mmax(0,1−yi(ωTxi+b))\min \limits_{\bm{\omega}, b} \quad \frac{1}{2} ||\bm{\omega}||^2 + C\sum_{i=1}^m max(0, 1 - y_i(\bm{\omega^Tx_i} + b))ω,bmin21ω2+Ci=1mmax(0,1yi(ωTxi+b))

  • 引入"松弛变量"ξi≥0\xi_i \ge 0ξi0,可重写为:
    min⁡ω,b,ξi12∣∣ω∣∣2+C∑i=1mξis.t.yi(ωTxi+b)≥1−ξiξi≥0,i=1,2,...,m. \min \limits_{\bm{\omega}, b,\xi_i} \quad \frac{1}{2} ||\bm{\omega}||^2 + C\sum_{i=1}^m\xi_i \\ s.t. \quad y_i(\bm{\omega^T{x_i}} + b ) \ge 1 - \xi_i \\ \xi_i \ge 0, i = 1,2,...,m. ω,b,ξimin21ω2+Ci=1mξis.t.yi(ωTxi+b)1ξiξi0,i=1,2,...,m.

  • 拉格朗日函数为:
    L(ω,b,α,ξ,μ)=12∣∣ω∣∣2+C∑i=1mξi+∑i=1mαi(1−ξi−yi(ωTxi+b))−∑i=1mμiξi L(\bm{\omega}, b,\bm{\alpha, \xi, \mu}) = \frac{1}{2} ||\bm{\omega}||^2 + C\sum_{i=1}^m\xi_i \\+ \sum_{i=1}^{m}\alpha_i(1-\xi_i-y_i(\bm{\omega^T{x_i}} + b )) - \sum_{i=1}^{m}\mu_i\xi_i L(ω,b,α,ξ,μ)=21ω2+Ci=1mξi+i=1mαi(1ξiyi(ωTxi+b))i=1mμiξi

其中αi≥0,μi≥0\alpha_i \ge 0, \mu_i \ge 0αi0,μi0是拉格朗日乘子。

  • ω,b,ξi\bm{\omega}, b,\xi_iω,b,ξi求偏导为0得:
    ω=∑i=1mαiyixi,0=∑i=1mαiyi,C=αi+μi. \bm{\omega} = \sum_{i=1}^{m} \alpha_i y_i \bm{x_i}, \\ 0 = \sum_{i=1}^{m} \alpha_i y_i, \\ C= \alpha_i + \mu_i. ω=i=1mαiyixi,0=i=1mαiyi,C=αi+μi.
  • 带入上式得对偶问题:
    max⁡α∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxjs.t.∑i=1mαiyi=0C≥αi≥0,i=1,2,...,m. \max \limits_{\bm{\alpha}} \quad \sum_{i=1}^{m}\alpha_i - \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_j\bm{x_i^Tx_j} \\ s.t. \quad \sum_{i=1}^{m}\alpha_iy_i = 0 \\ C \ge \alpha_i \ge 0, i = 1,2,...,m. αmaxi=1mαi21i=1mj=1mαiαjyiyjxiTxjs.t.i=1mαiyi=0Cαi0,i=1,2,...,m.
  • 对软间隔支持向量机,KKT条件得要求:
    {ai≥0,μi≥0,yif(xi)−1+ξi≥0,α(yif(xi)−1+ξi)=0,ξi≥0,μiξi=0. \begin{cases} a_i \ge 0,\\ \mu_i \ge0,\\ y_if(\bm{x_i}) - 1 + \xi_i\ge 0, \\ \alpha(y_if(\bm{x_i}) - 1 + \xi_i) = 0,\\ \xi_i \ge 0,\\ \mu_i\xi_i = 0. \end{cases} ai0,μi0,yif(xi)1+ξi0,α(yif(xi)1+ξi)=0,ξi0,μiξi=0.

对任意样本(xi,yi)(\bm{x_i},y_i)(xi,yi)总有αi=0或者yif(xi)=1−ξi\alpha_i = 0 或者 y_if(\bm{x_i}) = 1 - \xi_iαi=0yif(xi)=1ξi,若αi=0\alpha_i = 0αi=0,则该样本将不会在求和中出现,也就不会对f(x)f(x)f(x)有任何影响,若α&gt;0\alpha &gt; 0α>0,则必有yif(xi)=1−ξiy_if(\bm{x_i}) = 1 - \xi_iyif(xi)=1ξi,即样本是支持向量,若α&lt;C\alpha &lt; Cα<C,则μi&gt;0\mu_i &gt; 0μi>0,进而ξi=0\xi_i = 0ξi=0,该样本卡在最大间隔边界上,若α=C\alpha = Cα=C,则μi=0\mu_i = 0μi=0,若此时ξi≤1\xi_i \le 1ξi1则该样本落在最大间隔内部,若ξi&gt;1\xi_i &gt;1ξi>1则样本被错误分类

支持向量回归

转载于:https://www.cnblogs.com/htfeng/p/9931698.html


http://www.niftyadmin.cn/n/4557063.html

相关文章

hyperledger-fabric/qemu/kvm/virtual-manager -------vagrant-virtual-box

天我也遇到了这个问题&#xff0c;原因是你的 vagrant 版本跟你的 virtualbox 版本不匹配&#xff0c;解决的方法是&#xff0c;更换 virtualbox 的版本。我的 vagrant 版本是 1.8.4 &#xff0c;virtualbox 的版本是 5.1.2&#xff0c;在 vagrant up 的时候就会提示你说的错误…

谁能提供一些好的C++编程项目

可以开发一套人事管理系统

【颜纠日记】开源Github索引六大方法,开启专业学术搜索,Github搜索语法分享

长期更新预告&#xff1a; 生活经验&#xff0c;就业理财&#xff0c;操作系统&#xff0c; 学术查询&#xff0c;媒体剪辑 学术查询&#xff1a;学术查询&#xff1a;学术&#xff0c;笔记工具&#xff0c;工具搭配&#xff0c;授人以鱼不如授人以渔&#xff0c;搜索底层规则…

c#中怎样实现无页面刷新

page"pages; xmlhttp.open("GET" 微软有整套的框架 主页面通过javascript访问iframe中的数据现在来说的话推荐你使用ajax技术 iframe获取数据后 打开一个大小为0的iframe 使用javascript进行前段操作3.点击获取数据时 就可以了 ||| 有3种办法&#xff1a;1.使用…

(3)pyspark----dataframe观察

1、读取&#xff1a; sparkDF spark.read.csv(path)sparkDF spark.read.text(path)2、打印&#xff1a; sparkDF.show()【这是pandas中没有的】&#xff1a;打印内容 sparkDF.head()&#xff1a;打印前面的内容 sparkDF.describe()&#xff1a;统计信息 sparkDF.printSchema(…

【颜纠日记】WIN10无法完成操作,因为文件包含病毒或潜在的垃圾软件,实操完美解决

长期更新预告&#xff1a; 生活经验&#xff0c;就业理财&#xff0c;操作系统&#xff0c; 学术查询&#xff0c;媒体剪辑 操作系统&#xff1a;win,mac,android,ios,linux,虚拟机,vps. 信息过滤器重要性 ---颜纠日记 解决误杀 第一种方法 1.单击左下角windows图标然后找到…

计算机C语言怎么学啊

很快就能掌握 课后多敲敲代码 你只要跟着老师的思路学 不可能很难的 C是编程的入门语言 当你编出一个自己的程序你还会很有成就感呢

forEach,map遍历数组的区别

一、原生JS forEach()和map()遍历 共同点&#xff1a; 1.都是循环遍历数组中的每一项。 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数&#xff1a;数组中的当前项item,当前项的索引index,原始数组input。 3.匿名函数中的this都是指Window。 4.只能遍历数组。 1.f…