SVM要点

291 阅读3分钟

女神图开篇

前言:SVM学过了好多次,但是过一段时间都会遗忘,这里记下要点,做自己的备忘。本篇对没学过SVM的不友好,对懂SVM的是很好的备忘录。

参考:清华慕课 SVM章节

线性svm

  • 问题:找到一个超平面将两类点分开

  • 本质:低维的input space 到高维的feature space做映射,在高维空间切分

  • SVM是一个线性分类器,线性超平面方程为:\vec w\cdot \vec x +b = 0 ,其中 w\cdot x = \sum_{i=1}^nw_ix_i

  • \vec w =(w_1,w_2,\cdots,w_n) 是平面法向量,和该平面垂直。

  • 对于空间中的某一个点表示为:\vec x=(x_1,x_2,\cdots,x_n) , 该点带入平面方程为 g(x)=\vec w \cdot \vec x + b

  • 该点到超平面的距离是: M=\|\vec x - \hat x \| = \| \lambda w \|= \frac{\|(g(x)-g(\hat x)\|} {\vec w} \cdot \frac{\|w\|}{\vec w}  = \frac {\|g(x)\|} {\|w\|} , 其中 \hat x 是平面上的点,辅助计算的。

  • 什么是最优分类面:将点尽可能分开

  • margin:将超平面向两边平移,最先碰到的点到超平面的距离叫做margin,碰到的点就叫做支持向量。

  • margin越大,容错能力越强。SVM的训练目标是让margin最大

  • 选择平面 w\cdot x +b =1 , g(x)=w\cdot x +b, g(x)>1 为正样本;和平面 w \cdot x +b = -1g(x)=w\cdot x +b, g(x)<-1 为负样本。且保证没有点在 -1<g(x)<1 之间。(可以通过缩放系数做到),此时 margin 为 M = \frac{2}{\|w\|}

怎么分样本(数学表达

w\cdot x_i +b \geq 1 \qquad if \qquad y_i=+1 \\
w\cdot x_i +b < -1 \qquad if \qquad y_i=-1 \\
that's : \qquad y_i(w\cdot x_i +b)-1 \geq 0 \\
We\ need \ to \ maximize: \qquad \ max\ M=\frac{2}{\|w\|}  equals \ to \ => min\ \frac{1}{2}w^Tw
  • 带不等式约束极值问题,也可以用拉格朗日乘数法
L_P=\frac{1}{2}w^Tw - \sum_{i=1}^n\alpha_iy_i(w\cdot x_i +b)-\sum_{i=1}^n\alpha_i \\
约束条件为:y_i(w\cdot x_i +b)-1 \geq 0
  • 拉格朗日函数L_P求导后可以转化为对偶问题,对偶问题L_D可解
L_D=\sum_{i=1}^n\alpha_i - \frac{1}{2} \alpha ^T H \alpha \qquad (H=x_ix_jy_iy_j)
  • 解出来很多 \alpha_i 为0 ,不为0 对应的是支持向量。

软间隔svm

放宽约束

  • 约束条件改为: y_i(w\cdot x_i +b)-1+ \xi_i \geq 0

  • 最小化目标函数为: \Phi(w)=\frac{1}{2}w^Tw +C\sum_{i=1}^n \xi_i, 其中 \xi_i \geq 0

  • 求解方法同上,对偶问题如下

L_D=\sum_{i=1}^n\alpha_i - \frac{1}{2} \alpha ^T H \alpha \qquad (0\leq \alpha _i\leq C )
  • 注意主要不同点在于限制条件: 0\leq \alpha _i\leq C 才是最后的解。不在该范围内的点无效。

核svm

  • 出发点:为了解决线性不可分问题

  • 基本思想:样本点在原始空间不是线性可分,映射到高维空间线性可分。

  • 映射方法:主要有多项式映射和高斯函数映射。

  • 映射函数记为 \Phi(x), 例如单位圆上的点(x_1,x_2) 满足 x_1^2+x_2^2=1,非线性可分。选取 \Phi(x)=x^2 , 点在线上 ,线性可分。

  • 映射到高维空间的问题:计算复杂度变高很多 (例如二维变为1000维)。怎样降低复杂度,于是有人提出了核函数。

  • 多项式核函数 \Phi(x),(唯一的表达式,复杂略去),该核函数有一个特殊性质,满足

\Phi(a)\cdot\Phi(b) = (a\cdot b + 1)^2
  • 注意:a,b是原始空间的两个向量, \Phi(a)\cdot\Phi(b) 是映射到高维空间的向量内积,转化为了低维空间的内积。这正是巧妙之处。

  • 核函数记为 K(a,b), K(a,b)=(a\cdot b+1)^2 , a\cdot b+1 是在m维空间计算,等价计算出了 m^2 维空间 的值 \Phi(a)\cdot\Phi(b) = (a\cdot b + 1)^2 . (其实平方就是 m^2 维的计算啊,但是因为平方只用算m维就可以算出 m^2 维的

  • 注意区分映射函数\Phi(x)和核函数K(x_i,x_j)=\Phi(x_i)\Phi(x_j)

  • 例如 x=(x_1,x_2) 这里x_1,x_2是两个点,都是m维向量, K(x_1,x_2)=(1+x_1\cdot x_2)^2 。省略了映射函数

Polynomial\ kernel: \qquad K(x_i,x_j)=(x_i\cdot x_j +1)^d \\
Gussian\ kernel: \qquad K(x_i,x_j) = exp\left(-\frac{\|x_i-x_j\|}{2\delta^2} \right) \\
hyperbolic\ tangent: \qquad \qquad K(x_i,x_j) =tanh(\kappa\ x_ix_j+C)