SVM 也被称作大间距分类器。对非线性分类有较好的处理。SVM处理的问题都是凸优化问题,因此找到的几乎都是全局最优值。而神经网络存在局部最优的问题。
一、优化目标
Support vector machine Hypothesis(SVM的数学定义)
二、SVM的直观解释
假设中的 $C$ 作用等效于之前逻辑回归中的 $\frac{1}{\lambda}$ 。若 $C$ 很大,则假设会对异常点非常敏感(拟合很好甚至过拟合),表现为图中黑色的分界线会变为紫色的分界线;若 $C$ 很小,则可能会忽略异常点,得到黑线。($C$ 的作用类似正则化因子)
三、SVM的数学原理
向量内积(Vector Inner Product)
$u^Tv=p·||u||=u_1v_1+u_2v_2=v^Tu$
其中 $p$ 为向量 $v$ 在向量 $u$ 上的投影长度,范数 $||u||$ 为向量 $u$ 的长度,$p,||u||\in\mathbb{R}$,$u=[u_1,u_2],v=[v_1,v_2]$。
SVM 决策边界
SVM假设为(即 $C$ 很大,可以不考虑第一项)
根据向量内积,可将假设转换为
其中 $p^{(i)}$ 是 $x^{(i)}$ 在向量 $\theta$ 上的投影。假设 $\theta_0=0$,即向量 $\theta$ 过原点(该值是否为0对分类效果影响不大)。则分类情况会出现下面几种情况:
由图可见,通过选择右边的决策边界(绿线),可以让两类样本的间隔更远(即投影值 $p^{(i)}$),从而使得代价函数值更小。(当 $p^{(i)}>0$ 且较大时,$||\theta||$ 很小就能满足约束条件 $p^{(i)}\cdot|\theta|\ge 1$)。即分类器试图最大化训练样本到决策边界的距离——投影值 $p$。
四、核函数(Kernel Function)
利用相似度函数(核函数)和标记点来定义**新的特征变量 **$f$:
$f_i=\text{similarity}(x,l^{(i)})=\exp(-\frac{||x-l^{(i)}||^2}{2\sigma^2})$
若 $x\approx l^{(i)}$:则 $f_i\approx 1$
若 $x$ 离 $l^{(i)}$ 很远:则 $f_i\approx 0$
利用新的特征变量预测y值:
$\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3\ge 3,\quad y=1$
$\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3< 3,\quad y=0$
采用核函数的 SVM 运算过程:
给定样本集 :$(x^{(1)},y^{(1)},x^{(2)},y^{(2)},\ldots,x^{(m)},y^{(m)})$
选取标记点:
可以直接选择样本点作为标记点。即 $l^{(1)}=x^{(1)},l^{(2)}=x^{(2)},\ldots,l^{(m)}=x^{(m)}$
计算新的特征变量(映射)
$f_i=\text{similarity}(x,l^{(i)})$
$f=[f_0,f_1,\ldots,f_m],\quad f_0=1$
映射关系为:
$x^{(i)}\rightarrow (f_0^{(i)},f_1^{(i)},f_2^{(i)},\ldots,f_m^{(i)})$,即将样本点 $x^{(i)}$ (可能包含多个特征)映射为特征向量 $f_i$ 进行后续计算。
最终的假设就变为
SVM参数:
- $C(=\frac{1}{\lambda})$
- Large。低偏差,高方差(small λ)
- Small。高偏差,低方差(large λ)
- $\sigma^2$
- Large。特征向量 $f_i$ 非常平滑(变化平缓)。高偏差,低方差
- Small。特征向量 $f_i$ 非常陡峭(变化剧烈)。低偏差,高方差
使用SVM:
选择参数 $C$
选择核函数
核函数需要满足默塞尔定理。
- 线性核函数——即没有核函数
- 高斯核函数——$f=\exp(-\frac{||x-l^{(i)}||^2}{2\sigma^2})$,其中 $x^{(i)}=l^{(i)}$
- 高斯径向基核函数(Radial Basis Function,RBF)
- 多项式核函数(效果比较差)
- 字符串核函数
- ……
多分类
假设有 n 个特征值($x\in\mathbb{R}^{n+1}$),训练样本为 m。
- 若 n 很大,比 m 大(如n=10000,m=10,…1000),则使用逻辑回归或者使用带线性核函数的SVM
- 若 n 很小,m 大小适中(n=1,……,1000,m=10,……10000),则使用带高斯核函数的SVM
- 若 n 很小,m 很大(如n=1,……,1000,m=10000+),尝试找到更多的特征,然后使用逻辑回归或带线性核函数的SVM