在面试数据分析或算法相关岗位时,支持向量机是常被问到的一个算法,因此本文对于面试中常见的SVM原理以及核函数方面的问题进行了汇总。
支持向量机(SVM,Support Vector Machines)是一种用于分类和回归的监督学习算法。目的是在特征空间中找到间隔最大的超平面。
这里的超平面就是将所有类别划分开的那条线,当数据特征是二维时,此超平面是一条线;当数据特征是多维时,它就变成了面,如下图所示。超平面与最近的样本点保持一定的距离。
回答这个问题前,得先知道什么是间隔。如上图所示,间隔(margin)就是指决策面(y=0)与任意训练数据点之间的最小距离。
硬间隔是指SVM在分类中不允许出现分类错误。通俗点,硬间隔就是训练集中的任何数据点不允许出现在间隔内,即两条蓝线之间,但数据点可以出现在蓝色线上,这些点叫支持向量。
软间隔是指SVM在分类中允许出现分类错误的点,如下图所示。这些圈出的数据点都是支持向量,但是其中两个点不在蓝线上,一个在间隔内,另一个被分类错误(黑色直线所指的两个点)。软间隔允许这种情况存在,硬间隔则不允许。
上图是一个二分类且线性可分的实例,阈值为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表示。
间隔最大化就是让决策面与任意数据点的最小距离最大。SVM 通过间隔最大化可以将优化问题转换成一个凸优化问题,这时解是唯一的。而感知机根据误分类最小进行优化,可得到多个分离超平面,解有多个,如下图所示。
分类中的主要问题之一是类不平衡问题。当采用误分类作为损失函数时,容易受到类不平衡问题的影响,如二分类中有90%的数据属于A类,10%的数据属于B类,误分类是10%,这时的这个决策面是好还是不好?但是SVM采用间隔最大化就可以避免这类问题,因为它只受支持向量影响,鲁棒性强,不易过拟合。
相同点:都是用于分类的监督学习算法
异同点:
支持向量是指训练样本中,与分类超平面最近的数据点。其是训练数据的子集同时也是最难分类的点。
支持向量直接关系到决策面所在的位置。如下图所示,圆圈内的数据点便是支持向量,若从训练数据中删除圆圈内的点,则分类决策面会改变,若删除非圆圈内的点,则分类决策面不会改变。
主要是根据训练数据集是否线性可分以及是否允许出现分类错误进行划分的。主要包含以下三种模型:
支持向量机本质上是一个两类分类器,但通过组合可以处理多分类问题(多分类支持向量机)。
直接法:修改损失函数比如使用softmax,但这样复杂度高,实现起来比较麻烦,适合于小型问题。
间接法:
核函数主要是将数据映射到更高维度的空间,这个空间叫作特征空间。
在特征空间中,数据能够更容易地分离或更好地结构化。
这种映射的形式也没有限制,甚至可以形成无限维空间。核函数表示特征空间的内积,通常表示为:
K ( x , y ) = < x , y > = ϕ ( x ) T ϕ ( y ) K(x,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,2x1x2],ϕ(y)=[y12,y22,2y1y2]
则核函数的值为:
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)也可以是无限维的。高斯核可以数据扩展到无限维就是利用这个原理。
核函数的意义在于做到了没有真正映射到高维空间却达到了映射的作用,减少了大量的映射计算。
SVM核函数的引用主要将非线性分类问题转换为线性分类问题。因为存在一个假设,就是数据在低维空间不可分,但在高维空间可分。
高斯核: 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σ2∣∣x−y∣∣2)
根据泰勒展开式:
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!} ex≈1+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σ2∣∣x−y∣∣2)≈1+(−2σ2∣∣x−y∣∣2)+2!(−2σ2∣∣x−y∣∣2)2+3!(−2σ2∣∣x−y∣∣2)3+...+n!(−2σ2∣∣x−y∣∣2)n
可以对特征进行归一化,这样就可以用新的特征建模。但在类别变量中,特征归一化有时是不可行的,比如类别变量用one-hot编码,则只有0和1两个数字,此时就没有必要进行归一化,所以归一化并不总是有效的。
RBF核: k ( x , y ) = e x p ( − γ ∣ ∣ x − y ∣ ∣ 2 ) k(x,y)=exp(-\gamma ||x-y||^2) k(x,y)=exp(−γ∣∣x−y∣∣2)
SVM调优中的参数 γ \gamma γ表示超平面附近或远离超平面的点的影响。
当 γ \gamma γ越小,模型建模时将考虑训练集中的所有点,无法捕捉真正的超平面形状; γ \gamma γ越大,模型建模时只考虑超平面附近的点,将能够捕捉到数据集的形状。
在后面会给大家介绍SVM中对偶性以及损失函数方面的问题。
参考:
https://zhuanlan.zhihu.com/p/43827793
https://zhuanlan.zhihu.com/p/99027375