支持向量机

(一)

1.回顾感知机模型

在感知机原理小结中,我们讲到了感知机的分类原理,感知机的模型就是尝试找到一条直线,能够把二元数据隔离开。放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,能够把所有的二元类别隔离开。对于这个分离的超平面,我们定义为wTx+b=0,如下图。在超平面wTx+b=0上方的我们定义为y=1,在超平面wTx+b=0下方的我们定义为y=−1。可以看出满足这个条件的超平面并不止一个。那么我们可能会尝试思考,这么多的可以分类的超平面,哪个是最好的呢?或者说哪个是泛化能力最强的呢?

img

接着我们看感知机模型的损失函数优化,它的思想是让所有误分类的点(定义为M)到超平面的距离和最小,即最小化下式:
∑ − y ( i ) ( w T x ( i ) + b ) / ∣ ∣ w ∣ ∣ 2 \sum-y^{(i)}(w^Tx^{(i)}+b)/||w||_2 y(i)(wTx(i)+b)/∣∣w2

当w和b成比例的增加,比如,当分子的w和b扩大N倍时,分母的L2范数也会扩大N倍。也就是说,分子和分母有固定的倍数关系。那么我们可以固定分子或者分母为1,然后求另一个即分子自己或者分母的倒数的最小化作为损失函数,这样可以简化我们的损失函数。在感知机模型中,我们采用的是保留分子,固定分母||w||2=1,即最终感知机模型的损失函数为:

∑ x i ∈ M − y ( i ) ( w T x ( i ) + b ) \sum_{x_i\in M}-y^{(i)}(w^Tx^{(i)}+b) xiMy(i)(wTx(i)+b)

2. 函数间隔与几何间隔

在正式介绍SVM的模型和损失函数之前,我们还需要先了解下函数间隔和几何间隔的知识。

在分离超平面固定为wTx+b=0的时候,|wTx+b|表示点x到超平面的距离。通过观察wTx+b和y是否同号,我们判断分类是否正确,这些知识我们在感知机模型里都有讲到。这里我们引入函数间隔的概念,定义函数间隔γ′为: γ ′ = y ( w T x + b ) \gamma^{^{\prime}}=y(w^Tx+b) γ=y(wTx+b)

可以看到,它就是感知机模型里面的误分类点到超平面距离的分子。对于训练集中m个样本点对应的m个函数间隔的最小值,就是整个训练集的函数间隔。

函数间隔并不能正常反应点到超平面的距离,在感知机模型里我们也提到,当分子成比例的增长时,分母也是成倍增长。为了统一度量,我们需要对法向量w加上约束条件,这样我们就得到了几何间隔γ,定义为: γ = y ( w T x + b ) ∥ w ∥ 2 = γ ′ ∥ w ∥ 2 \gamma=\frac{y(w^Tx+b)}{\left\|w\right\|_2}=\frac{\gamma^{\prime}}{\left\|w\right\|_2} γ=w2y(wTx+b)=w2γ

3.支持向量

在感知机模型中,我们可以找到多个可以分类的超平面将数据分开,并且优化时希望所有的点都离超平面远。但是实际上离超平面很远的点已经被正确分类,我们让它离超平面更远并没有意义。反而我们最关心是那些离超平面很近的点,这些点很容易被误分类。如果我们可以让离超平面比较近的点尽可能的远离超平面,那么我们的分类效果会好有一些。SVM的思想起源正起于此。

如下图所示,分离超平面为wTx+b=0,如果所有的样本不光可以被超平面分开,还和超平面保持一定的函数距离(下图函数距离为1),那么这样的分类超平面是比感知机的分类超平面优的。可以证明,这样的超平面只有一个。和超平面平行的保持一定的函数距离的这两个超平面对应的向量,我们定义为支持向量,如下图虚线所示。

img

支持向量到超平面的距离为1/||w||2,两个支持向量之间的距离为2/||w||2。

4.SVM模型目标函数与优化

SVM的模型是让所有点到超平面的距离大于一定的距离,也就是所有的分类点要在各自类别的支持向量两边。用数学式子表示为:

m a x   γ = y ( w T x + b ) ∣ ∣ w ∣ ∣ 2   s . t   y i ( w T x i + b ) = γ ′ ( i ) ≥ γ ′ ( i = 1 , 2 , … m ) max\:\gamma=\frac{y(w^{T}x+b)}{||w||_{2}}\:s.t\:y_{i}(w^{T}x_{i}+b)=\gamma^{'(i)}\geq\gamma^{'}(i=1,2,\ldots m) maxγ=∣∣w2y(wTx+b)s.tyi(wTxi+b)=γ(i)γ(i=1,2,m)

一般我们都取函数间隔γ′为1,这样我们的优化函数定义为: m a x   1 ∥ w ∥ 2   s . t   y i ( w T x i + b ) ≥ 1 ( i = 1 , 2 , … m ) max~\frac1{\|w\|_2}~s.t~y_i(w^Tx_i+b)\geq1(i=1,2,\ldots m) max w21 s.t yi(wTxi+b)1(i=1,2,m)

也就是说,我们要在约束条件yi(wTxi+b)≥1(i=1,2,…m)下,最大化1/||w||2。可以看出,这个感知机的优化方式不同,感知机是固定分母优化分子,而SVM是固定分子优化分母,同时加上了支持向量的限制。

由于1/||w||2的最大化等同于1/2||w||22的最小化。这样SVM的优化函数等价于: m i n   1 2 ∣ ∣ w ∣ ∣ 2 2   s . t   y i ( w T x i + b ) ≥ 1 ( i = 1 , 2 , … m ) min~\frac12||w||_2^2~s.t~y_i(w^Tx_i+b)\geq1(i=1,2,\ldots m) min 21∣∣w22 s.t yi(wTxi+b)1(i=1,2,m)

5. 线性可分SVM的算法过程

这里我们对线性可分SVM的算法过程做一个总结。

输入是线性可分的m个样本(x1,y1),(x2,y2),…,(xm,ym),其中x为n维特征向量。y为二元输出,值为1,或者-1.

输出是分离超平面的参数w∗和b∗和分类决策函数。

算法过程如下:

img

线性可分SVM的学习方法对于非线性的数据集是没有办法使用的, 有时候不能线性可分的原因是线性数据集里面多了少量的异常点,由于这些异常点导致了数据集不能线性可分, 那么怎么可以处理这些异常点使数据集依然可以用线性可分的思想呢? 我们在下一节的线性SVM的软间隔最大化里继续讲.

(二)

有时候不能线性可分的原因是线性数据集里面多了少量的异常点,由于这些异常点导致了数据集不能线性可分,本篇就对线性支持向量机如何处理这些异常点的原理方法做一个总结。

1.线性分SVM面临的问题

有时候本来数据的确是可分的,也就是说可以用 线性分类SVM的学习方法来求解,但是却因为混入了异常点,导致不能线性可分,比如下图,本来数据是可以按下面的实线来做超平面分离的,可以由于一个橙色和一个蓝色的异常点导致我们没法按照上一篇线性支持向量机中的方法来分类。

img

另外一种情况没有这么糟糕到不可分,但是会严重影响我们模型的泛化预测效果,比如下图,本来如果我们不考虑异常点,SVM的超平面应该是下图中的红色线所示,但是由于有一个蓝色的异常点,导致我们学习到的超平面是下图中的粗虚线所示,这样会严重影响我们的分类模型预测效果。

img

如何解决这些问题呢?SVM引入了软间隔最大化的方法来解决。

2. 线性分类SVM的软间隔最大化

所谓的软间隔,是相对于硬间隔说的,我们可以认为上一篇线性分类SVM的学习方法属于硬间隔最大化。

回顾下硬间隔最大化的条件: m i n   1 2 ∣ ∣ w ∣ ∣ 2 2   s . t   y i ( w T x i + b ) ≥ 1 ( i = 1 , 2 , … m ) min~\frac12||w||_2^2~s.t~y_i(w^Tx_i+b)\geq1(i=1,2,\ldots m) min 21∣∣w22 s.t yi(wTxi+b)1(i=1,2,m)

接着我们再看如何可以软间隔最大化呢?

SVM对训练集里面的每个样本(xi,yi)引入了一个松弛变量ξi≥0,使函数间隔加上松弛变量大于等于1,也就是说:

y i ( w ∙ x i + b ) ≥ 1 − ξ i y_i(w\bullet x_i+b)\geq1-\xi_i yi(wxi+b)1ξi

对比硬间隔最大化,可以看到我们对样本到超平面的函数距离的要求放松了,之前是一定要大于等于1,现在只需要加上一个大于等于0的松弛变量能大于等于1就可以了。当然,松弛变量不能白加,这是有成本的,每一个松弛变量ξi, 对应了一个代价ξi,这个就得到了我们的软间隔最大化的SVM学习条件如下:

m i n 1 2 ∣ ∣ w ∣ ∣ 2 2 + C ∑ i = 1 m ξ i s . t . y i ( w T x i + b ) ≥ 1 − ξ i ( i = 1 , 2 , … m ) ξ i ≥ 0 ( i = 1 , 2 , … m ) \begin{gathered} min\frac12||w||_{2}^{2}+C\sum_{i=1}^{m}\xi_{i} \\ s.t.y_i(w^Tx_i+b)\geq1-\xi_i(i=1,2,\ldots m) \\ \xi_i\geq0\left(i=1,2,\ldots m\right) \end{gathered} min21∣∣w22+Ci=1mξis.t.yi(wTxi+b)1ξi(i=1,2,m)ξi0(i=1,2,m)

这里,C>0为惩罚参数,可以理解为我们一般回归和分类问题正则化时候的参数。C越大,对误分类的惩罚越大,C越小,对误分类的惩罚越小。

也就是说,我们希望12||w||22尽量小,误分类的点尽可能的少。C是协调两者关系的正则化惩罚系数。在实际应用中,需要调参来选择。

这个目标函数的优化和上一篇的线性可分SVM的优化方式类似,我们下面就来看看怎么对线性分类SVM的软间隔最大化来进行学习优化。

3. 线性分类SVM的软间隔最大化目标函数的优化

和线性可分SVM的优化方式类似,我们首先将软间隔最大化的约束问题用拉格朗日函数转化为无约束问题如下:

这里的数学运算太复杂了,没看。

最终;

m i n ⏟ α 1 2 ∑ i = 1 , j = 1 m α i α j y i y j x i T x j − ∑ i = 1 m α i s . t . ∑ i = 1 m α i y i = 0 0 ≤ α i ≤ C \begin{gathered} \underbrace{min}_{\alpha}\frac12\sum_{i=1,j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j-\sum_{i=1}^m\alpha_i \\ s.t.\sum_{i=1}^m\alpha_iy_i=0 \\ 0\leq\alpha_{i}\leq C \end{gathered} α min21i=1,j=1mαiαjyiyjxiTxji=1mαis.t.i=1mαiyi=00αiC

这就是软间隔最大化时的线性可分SVM的优化目标形式,和上一篇的硬间隔最大化的线性可分SVM相比,我们仅仅是多了一个约束条件0≤αi≤C。我们依然可以通过SMO算法来求上式极小化时对应的α向量就可以求出w和b了

5.软间隔最大化的线性可分SVM算法流程

这里我们对软间隔最大化时的线性可分SVM的算法过程做一个总结。

输入是线性可分的m个样本(x1,y1),(x2,y2),…,(xm,ym),其中x为n维特征向量。y为二元输出,值为1,或者-1.

输出是分离超平面的参数w∗和b∗和分类决策函数。

算法过程如下:

img

(三)

在前面两篇我们讲到了线性可分SVM的硬间隔最大化和软间隔最大化的算法,它们对线性可分的数据有很好的处理,但是对完全线性不可分的数据没有办法。本文我们就来探讨SVM如何处理线性不可分的数据,重点讲述核函数在SVM中处理线性不可分数据的作用。

1.回顾多项式回归

如何将多项式回归转化为线性回归。

比如一个只有两个特征的p次方多项式回归的模型:

h θ ( x 1 , x 2 ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 + θ 4 x 2 2 + θ 5 x 1 x 2 h_\theta(x_1,x_2)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1^2+\theta_4x_2^2+\theta_5x_1x_2 hθ(x1,x2)=θ0+θ1x1+θ2x2+θ3x12+θ4x22+θ5x1x2

我们令x0=1,x1=x1,x2=x2,x3=x21,x4=x22,x5=x1x2 ,这样我们就得到了下式:

h θ ( x 1 , x 2 ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 + θ 5 x 5 h_\theta(x_1,x_2)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4x_4+\theta_5x_5 hθ(x1,x2)=θ0+θ1x1+θ2x2+θ3x3+θ4x4+θ5x5

可以发现,我们又重新回到了线性回归,这是一个五元线性回归,可以用线性回归的方法来完成算法。对于每个二元样本特征(x1,x2),我们得到一个五元样本特征(1,x1,x2,x21,x22,x1x2),通过这个改进的五元样本特征,我们重新把不是线性回归的函数变回线性回归。

也就是说,对于二维的不是线性的数据,我们将其映射到了五维以后,就变成了线性的数据。

这给了我们启发,也就是说对于在低维线性不可分的数据,在映射到了高维以后,就变成线性可分的了。这个思想我们同样可以运用到SVM的线性不可分数据上。也就是说,对于SVM线性不可分的低维特征数据,我们可以将其映射到高维,就能线性可分,此时就可以运用前两篇的线性可分SVM的算法思想了。

2.核函数的引入

上一节我们讲到线性不可分的低维特征数据,我们可以将其映射到高维,就能线性可分。现在我们将它运用到我们的SVM的算法上。回顾线性可分SVM的优化目标函数:

m i n ⏟ α 1 2 ∑ i = 1 , j = 1 m α i α j y i y j x i ∙ x j − ∑ i = 1 m α i s . t . ∑ i = 1 m α i y i = 0 0 ≤ α i ≤ C \begin{gathered} \underbrace{min}_{\alpha}\frac12\sum_{i=1,j=1}^m\alpha_i\alpha_jy_iy_jx_i\bullet x_j-\sum_{i=1}^m\alpha_i \\ s.t.\sum_{i=1}^m\alpha_iy_i=0 \\ 0\leq\alpha_{i}\leq C \end{gathered} α min21i=1,j=1mαiαjyiyjxixji=1mαis.t.i=1mαiyi=00αiC

注意到上式低维特征仅仅以内积xi∙xj的形式出现,如果我们定义一个低维特征空间到高维特征空间的映射ϕ(比如上一节2维到5维的映射),将所有特征映射到一个更高的维度,让数据线性可分,我们就可以继续按前两篇的方法来优化目标函数,求出分离超平面和分类决策函数了。也就是说现在的SVM的优化目标函数变成:

m i n ⏟ α 1 2 ∑ i = 1 , j = 1 m α i α j y i y j ϕ ( x i ) ∙ ϕ ( x j ) − ∑ i = 1 m α i s . t . ∑ i = 1 m α i y i = 0 0 ≤ α i ≤ C \begin{gathered} \underbrace{min}_{\alpha}\frac12\sum_{i=1,j=1}^m\alpha_i\alpha_jy_iy_j\phi(x_i)\bullet\phi(x_j)-\sum_{i=1}^m\alpha_i \\ s.t.\sum_{i=1}^m\alpha_iy_i=0 \\ 0\leq\alpha_{i}\leq C \end{gathered} α min21i=1,j=1mαiαjyiyjϕ(xi)ϕ(xj)i=1mαis.t.i=1mαiyi=00αiC

可以看到,和线性可分SVM的优化目标函数的区别仅仅是将内积xi∙xj替换为ϕ(xi)∙ϕ(xj)。

看起来似乎这样我们就已经完美解决了线性不可分SVM的问题了,但是事实是不是这样呢?我们看看,假如是一个2维特征的数据,我们可以将其映射到5维来做特征的内积,如果原始空间是三维,可以映射到到19维空间,似乎还可以处理。但是如果我们的低维特征是100个维度,1000个维度呢?那么我们要将其映射到超级高的维度来计算特征的内积。这时候映射成的高维维度是爆炸性增长的,这个计算量实在是太大了,而且如果遇到无穷维的情况,就根本无从计算了。

怎么办?似乎我们刚提出了一种好的解决线性不可分的办法,接着就把自己否决了。

好吧,核函数该隆重出场了!

假设ϕ是一个从低维的输入空间χ(欧式空间的子集或者离散集合)到高维的希尔伯特空间的H映射。那么如果存在函数K(x,z),对于任意x,z∈χ,都有: K ( x , z ) = ϕ ( x i ) ∙ ϕ ( x j ) K(x,z)=\phi(x_i)\bullet\phi(x_j) K(x,z)=ϕ(xi)ϕ(xj)

那么我们就称K(x,z)为核函数。

从上面的式子乍一看还是不明白核函数怎么帮我们解决线性不可分的问题的。仔细观察上式可以发现,K(x,z)的计算是在低维特征空间来计算的,它避免了在刚才我们提到了在高维维度空间计算内积的恐怖计算量。也就是说,我们可以好好享受在高维特征空间线性可分的红利,却避免了高维特征空间恐怖的内积计算量。

至此,我们总结下线性不可分时核函数的引入过程:

我们遇到线性不可分的样例时,常用做法是把样例特征映射到高维空间中去(如上一节的多项式回归)但是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到令人恐怖的。此时,核函数就体现出它的价值了,核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数好在它在低维上进行计算,而将实质上的分类效果(利用了内积)表现在了高维上,这样避免了直接在高维空间中的复杂计算,真正解决了SVM线性不可分的问题。

3.核函数的介绍

事实上,核函数的研究非常的早,要比SVM出现早得多,当然,将它引入SVM中是最近二十多年的事情。对于从低维到高维的映射,核函数不止一个。那么什么样的函数才可以当做核函数呢?这是一个有些复杂的数学问题。这里不多介绍。由于一般我们说的核函数都是正定核函数,这里我们直说明正定核函数的充分必要条件。一个函数要想成为正定核函数,必须满足他里面任何点的集合形成的Gram矩阵是半正定的。也就是说,对于任意的xi∈χ,i=1,2,3…m, K(xi,xj)对应的Gram矩阵K=[K(xi,xj)] 是半正定矩阵,则K(x,z)是正定核函数。

从上面的定理看,它要求任意的集合都满足Gram矩阵半正定,所以自己去找一个核函数还是很难的,怎么办呢?还好牛人们已经帮我们找到了很多的核函数,而常用的核函数也仅仅只有那么几个。下面我们来看看常见的核函数, 选择这几个核函数介绍是因为scikit-learn中默认可选的就是下面几个核函数。

3.1 线性核函数

线性核函数(Linear Kernel)其实就是我们前两篇的线性可分SVM,表达式为: K ( x , z ) = x ∙ z K(x,z)=x\bullet z K(x,z)=xz

也就是说,线性可分SVM我们可以和线性不可分SVM归为一类,区别仅仅在于线性可分SVM用的是线性核函数。

3.2 多项式核函数

多项式核函数(Polynomial Kernel)是线性不可分SVM常用的核函数之一,表达式为: K ( x , z ) = ( γ x ∙ z + r ) d K(x,z)=(\gamma x\bullet z+r)^d K(x,z)=(γxz+r)d

其中,γ,r,d都需要自己调参定义。

3.3 高斯核函数

高斯核函数(Gaussian Kernel),在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是非线性分类SVM最主流的核函数。libsvm默认的核函数就是它。表达式为: K ( x , z ) = e x p ( − γ ∣ ∣ x − z ∣ ∣ 2 ) K(x,z)=exp(-\gamma||x-z||^2) K(x,z)=exp(γ∣∣xz2)

其中,γ大于0,需要自己调参定义。

3.4 Sigmoid核函数

Sigmoid核函数(Sigmoid Kernel)也是线性不可分SVM常用的核函数之一,表达式为: K ( x , z ) = t a n h ( γ x ∙ z + r ) K(x,z)=tanh(\gamma x\bullet z+r) K(x,z)=tanh(γxz+r)

4. 分类SVM算法总结

引入了核函数后,我们的SVM算法才算是比较完整了。现在我们对分类SVM的算法过程做一个总结。不再区别是否线性可分。

输入是m个样本(x1,y1),(x2,y2),…,(xm,ym),其中x为n维特征向量。y为二元输出,值为1,或者-1.

输出是分离超平面的参数w∗和b∗和分类决策函数。

至此,我们的分类SVM算是总结完毕,唯一的漏网之鱼是SMO算法,这个算法关系到,我们如何求出优化函数极小化时候的α∗,进而求出w,b,我们将在下一篇讨论这个问题。

(四)

SMO比较难,这里就不看了

(五)

5. SVM算法小结

这个系列终于写完了,这里按惯例SVM 算法做一个总结。SVM算法是一个很优秀的算法,在集成学习和神经网络之类的算法没有表现出优越性能前,SVM基本占据了分类模型的统治地位。目前则是在大数据时代的大样本背景下,SVM由于其在大样本时超级大的计算量,热度有所下降,但是仍然是一个常用的机器学习算法

SVM算法的主要优点有:

1) 解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。
    2) 仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。
    3) 有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。

4)样本量不是海量数据的时候,分类准确率高,泛化能力强。

SVM算法的主要缺点有:

1) 如果特征维度远远大于样本数,则SVM表现一般。
    2) SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用。
    3)非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。

4)SVM对缺失数据敏感。

下面是一个补充:https://mp.weixin.qq.com/s?__biz=MzIxMzkwNjM2NQ==&mid=2247484691&idx=1&sn=b21e8f5314454c990351034663e616e9&chksm=97aee3c1a0d96ad7b1d5940a41ddb46d63362d8fc6268cbfd6fb4a349c9391a9a44b277f08e5&scene=21#wechat_redirect

九. 如何选择核函数:

  • 当特征维数 超过样本数 时 (文本分类问题通常是这种情况), 使用线性核;
  • 当特征维数 比较小. 样本数 中等时, 使用RBF核;
  • 当特征维数 比较小. 样本数 特别大时, 支持向量机性能通常不如深度神经网络
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值