支持向量机(support vector machines)

136 阅读6分钟

SVM以其优美的数学理论支撑和优异的分类效果成为机器学习中一类重要的算法,如果想要了解SVM的相关定义和具体的理论推导,只要在百度中敲上 S V M SVM SVM就可以得到一大堆的相关资料,李航的《统计学习方法》和周志华的《机器学习》乃至于任何一本和机器学习相关的书籍无一例外都会花很多篇幅去介绍SVM的相关内容,大家只要仔细的看过几篇,对于其中涉及的各种概念和方法,如最大间隔、线性可分、对偶条件、拉格朗日乘子法、KKT条件、软间隔和和函数等都可以基本掌握。下面只是功利性的总结下在面试中可能涉及到的关于SVM重要的点。

核函数的作用是什么?常用的核函数有哪些?

当数据完全线性可分时对应的是硬间隔线性支持向量机;当大部分数据仍满足线性可分时,为了使用类似的机制进行处理,我们通过会引入惩罚因子来允许少量的数据点位于间隔中,对应的的为软间隔支持向量机。

而当数据在二维空间中完全不线性可分时,一种通常的做法就是将数据映射到更高维的空间中,然后在映射后的空间中通过间隔最大化的方式找到使其可线性可分的超平面 f ( x ) = w ϕ ( x ) + b f(x)=w \phi(x)+b f(x)=wϕ(x)+b,从而学习得到支持向量机。当将数据进行映射后对应的优化的对偶问题就变成了: min ⁡ λ [ 1 2 ∑ i = 1 n ∑ j = 1 n λ i λ j y i y j ( ϕ ( x i ) ⋅ ϕ ( x j ) ) − ∑ j = 1 n λ i ]  s.t.  ∑ i = 1 n λ i y i = 0 , λ i ≥ 0 , C − λ i − μ i = 0 \begin{array}{l} \min _{\lambda}\left[\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}\left(\phi\left(x_{i}\right) \cdot \phi\left(x_{j}\right)\right)-\sum_{j=1}^{n} \lambda_{i}\right] \\ \text { s.t. } \quad \sum_{i=1}^{n} \lambda_{i} y_{i}=0, \quad \lambda_{i} \geq 0, \quad C-\lambda_{i}-\mu_{i}=0 \end{array} minλ​[21​∑i=1n​∑j=1n​λi​λj​yi​yj​(ϕ(xi​)⋅ϕ(xj​))−∑j=1n​λi​] s.t. ∑i=1n​λi​yi​=0,λi​≥0,C−λi​−μi​=0​
从上式可以看出在求解优化问题的过程中涉及到了内积的计算 ϕ ( x i ) ϕ ( x j ) \phi(x_{i}) \phi(x_{j}) ϕ(xi​)ϕ(xj​)。如果所处理的数据需要映射到很高维的空间中才能达到线性可分的话,先把所有数据的点成做完再带入上式计算所涉及的计算量将会大到难以处理。而如果存在这样一个函数 k ( x , y ) = ( ϕ ( x i ) ϕ ( x j ) ) k(x,y) = (\phi(x_{i}) \phi(x_{j})) k(x,y)=(ϕ(xi​)ϕ(xj​)),它的输入是原始的数据 ( x , y ) (x,y) (x,y),而它的输出正好就是想要的内积计算的结果,这样就不需要计算高维甚至无穷维空间的内积了。所以核函数的引入一方面减少了计算量,一方面又减少了存储矩阵的内存。

常用的核函数有:

  • 线性核函数: k ( x i , x j ) = x i T x j k(x_i,x_j)=x_{i}^Tx_{j} k(xi​,xj​)=xiT​xj​
  • 多项式核函数: k ( x i , x j ) = ( x i T x j ) d k(x_i,x_j)=(x_{i}^Tx_{j})^d k(xi​,xj​)=(xiT​xj​)d
  • 高斯核函数: k ( x i , x j ) = exp ⁡ ( − ∣ ∣ x i − x j ∣ ∣ 2 σ 2 ) k(x_i,x_j)=\exp(-\frac{||x_{i}-x_{j}||}{2\sigma^2}) k(xi​,xj​)=exp(−2σ2∣∣xi​−xj​∣∣​)

为什么在SVM中求解优化问题时要将其转化为对偶问题进行处理?

将优化问题转化为对偶问题处理有如下几个原因:

  • 无论原始问题是否是凸优化问题,它们的对偶问题都是凸优化问题
  • 对偶问题的解为原始的优化问题提供了一个下界
  • 当满足一定条件时两者是等价的!
  • 方面核函数的引入

为什么SVM的鲁棒性更好?

从SVM的原理出发我们知道SVM的分类结果好坏只依赖于少数的支持向量,如果只是增删除支持向量外的数据点对于模型的效果没有影响。


为什么SVM对噪声数据和缺失数据敏感?

由前一个问题可知,SVM效果的好坏严重依赖于支持向量,如果噪声数据签好出现并被当作支持向量时,它们对于模型队友巨大的影响,,因此当噪声太多或是噪声以新的分布形式出现时对于模型有巨大的影响。

所谓的缺失数据是指哪些缺失部分特征的数据,因为SVM没有处理缺失数据的策略,且SVM本身希望数据在特征空间是线性可分的,若有趋势值则它们在该特征维度上将很难正确的分类。因此,SVM的性能依赖于特征空间的好坏,当有缺失数据时将影响模型的分类结果。


SVM如何防止过拟合及设置惩罚因子?

SVM本身就是一个自带 L 2 L_2 L2​正则项的分类器。SVM防止过拟合的主要技巧就在于调整软间隔松弛变量的惩罚因子 C C C。 C C C越大表明越不能容忍错分,当无穷大时则退化为硬间隔分类器。合适的 C C C大小可以照顾到整体数据而不是被一个噪声数据给带偏整个超平面。至于 C C C大小的具体调参通常可以采用交叉验证来获得.每个松弛变量对应的惩罚因子可以不一样。一般情况下,低偏差,高方差,即遇到过拟合时,减小C;高偏差,低方差,即遇到欠拟合时,增大C。


SVM如何解决样本类间不均衡问题

类间不均衡问题广泛的存在于各种任务中,常见的处理方式比如下采样、数据增广等。而在SVM中可以通过为正负类样本设置不同的惩罚因子来解决,那个类别的数据较少可以相应的将惩罚因子设置的大一些,从而告诉模型尤其不能错分这些。


SVM的优缺点

优点:

  • 由于SVM是一个凸优化问题,所以求得的解一定是全局最优而不是局部最优。
  • 不仅适用于线性线性问题还适用于非线性问题(用核技巧)。
  • 拥有高维样本空间的数据也能用SVM,这是因为数据集的复杂度只取决于支持向量而不是数据集的维度,这在某种意义上避免了“维数灾难”。
  • 理论基础比较完善(例如神经网络就更像一个黑盒子)。

缺点:

  • 二次规划问题求解将涉及m阶矩阵的计算(m为样本的个数), 因此SVM不适用于超大数据集。(SMO算法可以缓解这个问题)
  • 只适用于二分类问题。(SVM的推广SVR也适用于回归问题;可以通过多个SVM的组合来解决多分类问题)

逻辑回归和SVM的区别是什么?各适用于解决什么问题?