在面试数据分析或算法相关岗位时,支持向量机是常被问到的一个算法,因此本文对于面试中常见的SVM原理以及核函数方面的问题进行了汇总。

1 什么是支持向量机?

支持向量机(SVM,Support Vector Machines)是一种用于分类和回归的监督学习算法。目的是在特征空间中找到间隔最大的超平面。

这里的超平面就是将所有类别划分开的那条线,当数据特征是二维时,此超平面是一条线;当数据特征是多维时,它就变成了面,如下图所示。超平面与最近的样本点保持一定的距离。

机器学习SVM算法常见面试题(一)_核函数

2 什么叫硬间隔软间隔?

机器学习SVM算法常见面试题(一)_数据_02

回答这个问题前,得先知道什么是间隔。如上图所示,间隔(margin)就是指决策面(y=0)与任意训练数据点之间的最小距离

硬间隔是指SVM在分类中不允许出现分类错误。通俗点,硬间隔就是训练集中的任何数据点不允许出现在间隔内,即两条蓝线之间,但数据点可以出现在蓝色线上,这些点叫支持向量。

软间隔是指SVM在分类中允许出现分类错误的点,如下图所示。这些圈出的数据点都是支持向量,但是其中两个点不在蓝线上,一个在间隔内,另一个被分类错误(黑色直线所指的两个点)。软间隔允许这种情况存在,硬间隔则不允许。

机器学习SVM算法常见面试题(一)_机器学习_03

上图是一个二分类且线性可分的实例,阈值为0。大于0,目标值( t n t_n tn)属于类别1,小于0,目标值( t n t_n tn)属于类别-1,可用线性模型 y ( x ) = w T ϕ ( x ) + b y(x)=w^T\phi (x)+b y(x)=wTϕ(x)+b表示。

3 SVM为什么采用间隔最大化?

间隔最大化就是让决策面与任意数据点的最小距离最大。SVM 通过间隔最大化可以将优化问题转换成一个凸优化问题,这时解是唯一的。而感知机根据误分类最小进行优化,可得到多个分离超平面,解有多个,如下图所示。

分类中的主要问题之一是类不平衡问题。当采用误分类作为损失函数时,容易受到类不平衡问题的影响,如二分类中有90%的数据属于A类,10%的数据属于B类,误分类是10%,这时的这个决策面是好还是不好?但是SVM采用间隔最大化就可以避免这类问题,因为它只受支持向量影响,鲁棒性强,不易过拟合。

机器学习SVM算法常见面试题(一)_支持向量机_04

4 SVM与感知机的区别?

相同点:都是用于分类的监督学习算法

异同点:

  • 损失函数:感知机采用的是误分类,易造成过拟合。SVM采用间隔最大化(合页损失函数),一定程度上避免过拟合。
  • 优化方法:感知机采用梯度下降法,SVM采用不等式约束结合拉格朗日乘子。
  • 超平面数量:感知机解有多个,SVM只有一个解。
  • 线性非线性分类:感知机只用于线性分类,SVM可用于线性和非线性分类。

5 什么叫支持向量?

支持向量是指训练样本中,与分类超平面最近的数据点。其是训练数据的子集同时也是最难分类的点。

支持向量直接关系到决策面所在的位置。如下图所示,圆圈内的数据点便是支持向量,若从训练数据中删除圆圈内的点,则分类决策面会改变,若删除非圆圈内的点,则分类决策面不会改变。

机器学习SVM算法常见面试题(一)_机器学习_05

6 支持向量机包含几种模型?

主要是根据训练数据集是否线性可分以及是否允许出现分类错误进行划分的。主要包含以下三种模型:

  • 硬间隔支持向量机:当训练数据线性可分时,硬间隔最大化不允许出现分类错误,此时超平面将所有训练数据集都分类正确,所以叫硬间隔支持向量机。
  • 软间隔支持向量机:当训练数据近似线性可分时,软间隔最大化允许出现分类错误,此时超平面不能将所有训练数据点都分类正确,所以叫软间隔支持向量机。
  • 非线性支持向量机:当训练数据线性不可分时,通过使用核函数和软间隔最大化对数据进行分类。

7 SVM怎么处理多分类?

支持向量机本质上是一个两类分类器,但通过组合可以处理多分类问题(多分类支持向量机)。

直接法:修改损失函数比如使用softmax,但这样复杂度高,实现起来比较麻烦,适合于小型问题。

间接法:

  • 一对多,将K类的某一类作为正类,剩下的K-1类作为负类,建立支持向量机分类模型 。复杂度K, 会导致模糊区域,即数据不属于任何类别。
  • 一对一,训练K(K - 1)/2个支持向量机(两两组合),采用投票法。复杂度K(K - 1)/2,也会导致模糊区域。

8 核函数原理?

核函数主要是将数据映射到更高维度的空间,这个空间叫作特征空间。

在特征空间中,数据能够更容易地分离或更好地结构化。

这种映射的形式也没有限制,甚至可以形成无限维空间。核函数表示特征空间的内积,通常表示为:

K ( x , y ) = < x , y > = ϕ ( x ) T ϕ ( y ) K(x,y)=<x,y>=\phi(x)^T\phi(y) K(x,y)=<x,y>=ϕ(x)Tϕ(y)

核函数通过内积计算,避免了直接计算映射。

假设存在二维向量 x = [ x 1 , x 2 ] , y = [ y 1 , y 2 ] x=[x_1,x_2],y=[y_1,y_2] x=[x1,x2],y=[y1,y2],将其升维( ϕ \phi ϕ)到高维空间,则:

升维到三维空间:

ϕ ( x ) = [ x 1 2 , x 2 2 , 2 x 1 x 2 ] , ϕ ( y ) = [ y 1 2 , y 2 2 , 2 y 1 y 2 ] \phi(x)=[x_1^2,x_2^2,\sqrt{2}x_1x_2],\phi(y)=[y_1^2,y_2^2,\sqrt{2}y_1y_2] ϕ(x)=[x12,x22,2 x1x2],ϕ(y)=[y12,y22,2 y1y2]

则核函数的值为:

K ( x , y ) = ϕ ( x ) T ϕ ( y ) = x 1 2 y 1 2 + x 2 2 y 2 2 + 2 x 1 x 2 y 1 y 2 = ( x 1 y 1 + x 2 y 2 ) 2 = ( x T y ) 2 = f ( x , y ) \begin{aligned} K(x,y)&=\phi(x)^T\phi(y)\\ &=x_1^2y_1^2+x_2^2y_2^2+2x_1x_2y_1y_2\\ &=(x_1y_1+x_2y_2)^2\\ &=(x^Ty)^2\\ &=f(x,y) \end{aligned} K(x,y)=ϕ(x)Tϕ(y)=x12y12+x22y22+2x1x2y1y2=(x1y1+x2y2)2=(xTy)2=f(x,y)

f f f表示函数,在这里代表多项式核函数。在其他条件下, f f f可以为任何函数形式。

升维到四维空间:

ϕ ( x ) = [ x 1 2 , x 2 2 , x 1 x 2 , x 1 x 2 ] , ϕ ( y ) = [ y 1 2 , y 2 2 , y 1 y 2 , y 1 y 2 ] \phi(x)=[x_1^2,x_2^2,x_1x_2,x_1x_2],\phi(y)=[y_1^2,y_2^2,y_1y_2,y_1y_2] ϕ(x)=[x12,x22,x1x2,x1x2],ϕ(y)=[y12,y22,y1y2,y1y2]

则核函数的值为:

K ( x , y ) = ϕ ( x ) T ϕ ( y ) = x 1 2 y 1 2 + x 2 2 y 2 2 + 2 x 1 x 2 y 1 y 2 = f ( x , y ) K(x,y)=\phi(x)^T\phi(y)=x_1^2y_1^2+x_2^2y_2^2+2x_1x_2y_1y_2=f(x,y) K(x,y)=ϕ(x)Tϕ(y)=x12y12+x22y22+2x1x2y1y2=f(x,y)

这里要注意一个问题,当 ϕ ( x ) , ϕ ( y ) \phi(x),\phi(y) ϕ(x),ϕ(y)是三维时, f ( x , y ) f(x,y) f(x,y)可以化为三项的和;当 ϕ ( x ) , ϕ ( y ) \phi(x),\phi(y) ϕ(x),ϕ(y)是四维时, f f f可以化为四项的和。所以 f f f可以转化成多少项的和, ϕ ( x ) , ϕ ( y ) \phi(x),\phi(y) ϕ(x),ϕ(y)就有多少维,即当 f f f可以化成无限的项相加时, ϕ ( x ) , ϕ ( y ) \phi(x),\phi(y) ϕ(x),ϕ(y)也可以是无限维的。高斯核可以数据扩展到无限维就是利用这个原理。

核函数的意义在于做到了没有真正映射到高维空间却达到了映射的作用,减少了大量的映射计算。

9 为什么引入核函数?

SVM核函数的引用主要将非线性分类问题转换为线性分类问题。因为存在一个假设,就是数据在低维空间不可分,但在高维空间可分。

机器学习SVM算法常见面试题(一)_Python_06

10 SVM有哪些核函数,对应有哪些使用场景和特点?

  • 线性核:主要用于线性可分以及样本数与特征数差不多的情况。参数少,速度快。
  • 非线性核:RBF、tanh核:主要用于线性不可分以及特征数较少样本量一般的情况。参数多,分类结果非常依赖于参数。需要花费时间进行参数调节,才能达到好的结果。用于神经网络。

11 SVM什么时候用线性核什么时候用高斯核?

  • 数据线性可分:数据特征与样本量差不多的情况用线性核,当特征少样本量多时,可手动添加特征,然后用线性核。
  • 数据线性不可分:数据特征较少,样本量一般时,用高斯核。

12 高斯核为什么会把原始维度映射到无穷多维?

高斯核: k ( x , y ) = e x p ( − ∣ ∣ x − y ∣ ∣ 2 2 σ 2 ) k(x,y)=exp(- \frac{||x-y||^2}{2\sigma^2}) k(x,y)=exp(2σ2xy2)

根据泰勒展开式:

e x ≈ 1 + x + x 2 2 ! + x 3 3 ! + . . . + x n n ! e^x \approx 1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+...+\frac{x^n}{n!} ex1+x+2!x2+3!x3+...+n!xn

将泰勒展开式带入高斯核,将得到一个无穷维度的映射:

k ( x , y ) = e x p ( − ∣ ∣ x − y ∣ ∣ 2 2 σ 2 ) ≈ 1 + ( − ∣ ∣ x − y ∣ ∣ 2 2 σ 2 ) + ( − ∣ ∣ x − y ∣ ∣ 2 2 σ 2 ) 2 2 ! + ( − ∣ ∣ x − y ∣ ∣ 2 2 σ 2 ) 3 3 ! + . . . + ( − ∣ ∣ x − y ∣ ∣ 2 2 σ 2 ) n n ! \begin{aligned} k(x,y)&=exp(- \frac{||x-y||^2}{2\sigma^2})\\ & \approx 1+(- \frac{||x-y||^2}{2\sigma^2}) +\frac{(- \frac{||x-y||^2}{2\sigma^2}) ^2}{2!}+\frac{(- \frac{||x-y||^2}{2\sigma^2}) ^3}{3!}+...+\frac{(- \frac{||x-y||^2}{2\sigma^2}) ^n}{n!} \end{aligned} k(x,y)=exp(2σ2xy2)1+(2σ2xy2)+2!(2σ2xy2)2+3!(2σ2xy2)3+...+n!(2σ2xy2)n

13 SVM在应用高斯核时是否需要对特征归一化?

可以对特征进行归一化,这样就可以用新的特征建模。但在类别变量中,特征归一化有时是不可行的,比如类别变量用one-hot编码,则只有0和1两个数字,此时就没有必要进行归一化,所以归一化并不总是有效的。

14 假设在SVM中使用RBF核,若核的参数 γ \gamma γ过高,意味着什么?

RBF核: k ( x , y ) = e x p ( − γ ∣ ∣ x − y ∣ ∣ 2 ) k(x,y)=exp(-\gamma ||x-y||^2) k(x,y)=exp(γxy2)

SVM调优中的参数 γ \gamma γ表示超平面附近或远离超平面的点的影响。

γ \gamma γ越小,模型建模时将考虑训练集中的所有点,无法捕捉真正的超平面形状; γ \gamma γ越大,模型建模时只考虑超平面附近的点,将能够捕捉到数据集的形状。

在后面会给大家介绍SVM中对偶性以及损失函数方面的问题。

参考:
https://zhuanlan.zhihu.com/p/43827793
https://zhuanlan.zhihu.com/p/99027375