找工作之支持向量机

本文介绍了支持向量机(SVM)的核心概念,包括冯老师的五个关键思想:寻找超平面、最大化间隔、支持向量、对偶问题和核函数。通过对偶问题和KKT条件,探讨了SVM的优化过程,并详细阐述了SMO算法的总体步骤和确定b的策略。最后,简要提到了核函数在非线性可分情况下的应用。
摘要由CSDN通过智能技术生成


注:本博客定义为学习笔记,为本人通过一些材料和书籍整理而来,或许会有些许心得体会。

冯老师的SVM的五个key idea

key idea 1

SVM要找到的超平面如下图实线所示:

  其中,w 是超平面的法向量,u 是任意一个点,wuu 在法向量w 上的投影长度(乘以w之后的投影长度)
  


  虚线为最近的正负样本所在的位置,我们的目的是为了widest street way,即让两条虚线之间的距离最大,这样,在它们中间的实线即为所要求的超平面。
  给 u,决策公式如下:
   wu+b0THEN+ELSE
  直观理解,即:
   wuc,其中,c为决策边界到原点的距离。
  超平面的线性方程为:
   wx+b=0
  其中, w为法向量,决定了超平面的方向;b为位移项,决定了超平面与原点之间的距离。超平面与原点之间的距离为 |b|w
  KEY IDEA 1: wu+b0THEN+ELSE
   <script type="math/tex; mode=display" id="MathJax-Element-44"></script>

key idea 2

  


  针对训练集:
   {wu++b1wu+b1
  这里的+1和-1是一个数学技巧,不是1的话,可以通过改变w和b让其变为1
  由于:
   yi={+1,x1,x
  因此,有:
   {yi(wu++b)1yi(wu+b)1
  即:
   yi(wu+b)1
  KEY IDEA 2: yi(wu+b)10

key idea 3

  虚线边上的向量,即为支持向量(站街向量)x_s,有y_i(\vec w \cdot \vec x_s+b)-1=0
  


  如上图所示,间隔的宽度width为向量 \vec x_+-\vec x_-在法向量 \vec w上的投影距离:
   width=\cfrac {(\vec x_+-\vec x_-)\cdot \vec w}{\left \| \vec w \right\|}
  由 y_i(\vec w \cdot \vec x_s+b)-1=0,得:
   \begin{cases}\vec w \cdot \vec x_+ =1-b \\-\vec w \cdot \vec x_- =1+b \end{cases}
  两式相加,得:
   (\vec x_+-\vec x_-)\cdot \vec w=2
  即:
   width=\cfrac 2{\left \|\vec w\right\|}
  KEY IDEA 3: width=\cfrac 2{\left \|\vec w\right\|}

key idea 4

  想要最大化间隔width,即:
  \begin{aligned} &max \cfrac{2}{\left \|\vec w\right\|} \\ \implies &max \cfrac{1}{\left \|\vec w\right\|} \\ \implies &min \left \|\vec w\right\| \\\implies & min \frac12(\left \|\vec w\right\|)^2\end{aligned} \\ s.t. \quad y_i(\vec w \cdot \vec x +b)-1 \geq 0
  上式是SVM的基本型 。其实s.t. y_i(\vec w \cdot \vec x +b)-1 \geq 0这里,可以写成s.t. y_i(\vec w \cdot \vec x +b)-1 = 0,因为在KEY IDEA 3中,推导width时只用了支持向量,并没有用其余的正负例。
  间隔貌似仅仅与\vec w 有关,但事实上b通过约束条件也在影响着w的取值,进而对间隔产生影响。
  此时,由于有了约束条件,可以拉格朗日乘子法,构造拉格朗日函数:
  L(\vec w,b,\vec \alpha)=\cfrac 12 \left \|\vec w\right\|^2+\sum \limits_{i=1}^{n}\alpha_i[1-y_i(\vec w \cdot \vec x_i +b)]
  此时,上述的最小优化问题即为:
  \min_{\vec w,b}\max_{\vec \alpha}L(\vec w,b,\vec \alpha)
  根据拉格朗日对偶性,原始问题的对偶问题为:
  \max_{\vec \alpha}\min_{\vec w,b}L(\vec w,b,\vec \alpha)
  KEY IDEA 4:L(\vec w,b,\vec \alpha)=\cfrac 12 \left \|\vec w\right\|^2+\sum \limits_{i=1}^{n}\alpha_i[1-y_i(\vec w \cdot \vec x_i +b)]

key idea 5

  w,b是变量,要求极值,对w,b求偏导为0,对向量求偏导和对变量求偏导是一样的,得:
  \begin{aligned}\cfrac{\partial L}{\partial \vec w}&=\vec w-\sum_{i=1}^{n}\alpha_iy_i\vec x_i=0 \\    \cfrac{\partial L}{\partial b}&=\sum_{i=1}^{n}\alpha_iy_i=0\end{aligned}
  得:
  \vec w^*=\sum_{i=1}^{n}\alpha_iy_i\vec x_i \\ \sum_{i=1}^{n}\alpha_iy_i=0
  从\vec w^*的表达式来看,\vec w^*\vec x_i的线性组合,因为前文说过,限制条件其实本质上就是s.t. y_i(\vec w \cdot \vec x +b)-1 = 0,即上述求和过程中,其实并不是所有样本点都进行求和,而是只对支持向量进行了求和。所以\vec w^*本质上也就是支持向量\vec x_s的线性组合。
  因此,将上述求出来的式子带入L(\vec w,b,\vec \alpha)中,得到:
  \begin{aligned}L(\vec \alpha)&=\cfrac 12 \left \|\vec w\right\|^2+\sum \limits_{i=1}^{n}\alpha_i[1-y_i(\vec w \cdot \vec x_i +b)] \\   &=\cfrac 12 \sum_i\alpha_iy_i\vec x_i\sum_j\alpha_jy_j\vec x_j-\sum_i\alpha_iy_i\vec x_i\sum_j\alpha_jy_j\vec x_j+b\sum_i\alpha_i\vec x_i+\sum_i\alpha_i \\   &=\sum_{i=1}^{n}\alpha_i-\cfrac 12 \sum_i\sum_j\alpha_i\alpha_jy_iy_j(\vec x_i\cdot \vec x_j)\end{aligned}
  KEY IDEA 5:L(\vec \alpha)=\sum\limits_{i=1}^{n}\alpha_i-\cfrac 12 \sum\limits_i\sum\limits_j\alpha_i\alpha_jy_iy_j(\vec x_i\cdot \vec x_j) \tag0
  用优化方法求出\vec \alpha^*之后,便可以求出原始问题的解\vec w^*,b^*
  设\vec \alpha^*=(\alpha_1^*,\alpha_2^*,\alpha_3^*,\ldots,\alpha_n^*,)\alpha_j^*\alpha的一个分量,则:
  \begin{aligned}\vec w^*&=\sum_{i=1}^{n}\alpha_iy_ix_i \\   b^*&=y_j-\sum_{i=1}^{n}\alpha_i^*y_i(\vec x_i\cdot x_j)\quad (\text{暂时不会,西瓜书中的求法在SMO章节中介绍})\end{aligned}

对偶问题和KKT条件

  SVM的基本型的对偶问题为:
\max\limits_{\vec \alpha}\sum\limits_{i=1}^{n}\alpha_i-\cfrac 12 \sum\limits_i\sum\limits_j\alpha_i\alpha_jy_iy_j(\vec x_i\cdot \vec x_j) \\ s.t.\begin{aligned}& \sum_{i=1}^{n}\alpha_iy_i=0, \\ &\alpha_i \geq 0,\quad i=1,2,\ldots,n\end{aligned}
  注意到基本型有不等式约束,因此必须满足KKT条件:
\begin{cases}\alpha_i \geq 0 \\ y_if(\vec x_i) -1 \geq 0 \\ \alpha_i( y_if(\vec x_i) -1)=0\end{cases}
  注意到此KKT条件中的最后一项,对于任意训练样本,总有\alpha_i=0或者y_if(\vec x_i)=1,若\alpha_i=0,意味着只要\vec x_i不是支持向量,那么它将在约束条件中不起作用,也就不会对f(\vec x)有任何影响。若y_if(\vec x_i)=1,表示\vec x_i是支持向量。这显示出支持向量机的一个重要性质:
  \color{#F00}{\bf 训练完成以后,大部分样本都不需要保留,最终模型只与支持向量有关。}

核函数

  前面的讨论中,我们假设训练样本是线性可分的。若线性不可分,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个更高维的特征空间中线性可分。如下图所示:
这里写图片描述
  但是,想要找到这个的变换\phi其实很难找,我们无需找到\phi的具体表达式,只需要知道\phi(x_i)\cdot \phi (x_j)的结果即x_ix_j变换后的点乘即可。
  令k(x_i,x_j)=\phi(x_i)\cdot \phi(x_j),这个k(x_i,x_j)就是核函数。
  常用核函数如下:

名称表达式参数
线性核k(\vec x_i,\vec x_j)=\vec x_i \cdot \vec x_j
多项式核k(\vec x_i,\vec x_j)=(\vec x_i \cdot \vec x_j+1)^dd\geq1为多项式的次数
拉普拉斯核k(\vec x_i,\vec x_j)=e^{-\cfrac{\left\|\vec x_i-\vec x_j\right\|}{\sigma}}\sigma>0
高斯核k(\vec x_i,\vec x_j)=e^{-\cfrac{\left\|\vec x_i-\vec x_j\right\|^2}{2\sigma^2}}\sigma>0为高斯核的带宽(width)
Sigmoid 核k(\vec x_i,\vec x_j)=\tanh (\beta\vec x_i\cdot \vec x_j+\theta)\tanh 为双曲正切曲线,\beta>0,\theta<0

  此外,核函数的线性组合也是核函数。
  有了核函数之后,原公式中的\vec x_i\cdot \vec x_j都可以替换为k(\vec x_i,\vec x_j)。即要优化的函数为:
L(\vec \alpha)=\sum\limits_{i=1}^{n}\alpha_i-\cfrac 12 \sum\limits_i\sum\limits_j\alpha_i\alpha_jy_iy_jk(\vec x_i,\vec x_j)
  \vec w\cdot \vec x+b\geq 0\sum\limits_{i=1}^{n}\vec \alpha_iy_i(\vec x_i \cdot \vec u_i)+b\geq 0变为\sum\limits_{i=1}^{n}\vec \alpha_iy_ik(\vec x_i ,\vec u_i)+b\geq 0

  kernel相当于对\vec x做了一个变换,我们不需要知道变换具体是什么,只需要知道其两两点积的结果。
  通常,对文本数据常采用线性核,情况不明时可先尝试高斯核。

SMO算法

算法总体过程

  序列最小最优化(sequential minimal optimization,SMO)算法。
  cordinate ascent过程:\alpha=\max\limits_{\alpha_i}\alpha(\alpha_1,\alpha_2,\alpha_3,\ldots,\alpha_n)

while not converge:
    for i in range(n):
        ai=argmax w(a1,a2,....an)

  每一次循环,都把\alpha_i当作变量,固定其他\alpha,w是单变量函数,对w求极值。
  初始时,对\vec \alpha随即初始化,可以\alpha_1开始逐步将其当作变量,然后更新\alpha_1,再更新\alpha_2,直到收敛为止。
  
  但是上面的过程不能直接用于SVM的求解中,因SVM求解过程中都是成对的向量,需要将ai=argmax w(a1,a2,….an)改为:
  (\alpha_i,\alpha_j)= \mathop {\arg\max}\limits_{\neq i,j}w(\alpha_1,\ldots,\alpha_n)
  因为\sum\limits_{i=1}^{n}\alpha_iy_i=0。因此,一个\alpha_i能用其他\alpha_j线性表达,因此固定一个相当于没有固定。
  若(\alpha_i,\alpha_j)作为变量,其中一个可以被另一个线性表达,所以可同时更新两个变量。
  SMO算法之所以高效,就是因为固定其他参数之后,仅优化两个参数的过程能做到非高效。以下是求解过程:
  在将原问题变换为对偶问题之后,仅考虑\alpha_i\alpha_j两个参数时,原来的约束项可以重写为:
  \alpha_iy_i+\alpha_jy_j=c, \alpha_i \geq 0,\alpha_j \geq 0
  其中:
  c=-\sum_{k\neq i,j}\alpha_ky_k
  是使 \sum_{i=1}^{n}\alpha_iy_i=0成立的常数。
  用\alpha_iy_i+\alpha_jy_j=c消去公式0的\alpha_j,得到一个关于\alpha_i的单变量二次规划问题,约束条件只有\alpha_i>0,这样的二次规划问题有闭式解,不用调用数值优化算法即可高效地计算出更新后的\alpha_i\alpha_j

确定b

  w可以由之前的偏导为0直接求出,b的值不能直接确定。
  注意到,对任意支持向量(\vec x_s,y_s),都有y_sf(\vec x_s)=1,即:
  y_s(\sum_{i \in S}\alpha_iy_i \vec x_i \cdot \vec x_s+b)=1
  其中,S为所有支持向量的下标集。理论上,可以选择任意一个支持向量通过上式来求出b,但可以采用一种更为鲁棒的方法:使用所有支持向量求解的平均值
  b=\cfrac 1{|S|}\sum_{s \in S}(\cfrac 1y_s-\sum_{i \in S}\alpha_iy_i \vec x_i \cdot \vec x_s)

参考资料

李航,《统计学习方法》
赵志勇,《Python机器学习算法》
周志华,《机器学习》
冯老师,七月在线机器学习工程师

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值