[机器学习] 分类 --- Support Vector Machine (SVM)

1. 基本概念

支持向量机(Support Vector Machine, SVM)的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大。SVM是用来解决二分类问题的有监督学习算法,在引入了核方法之后SVM也可以用来解决非线性问题。

一个普通的SVM是一条直线,用来完美划分linearly separable 的两类。但这又不是一条普通的直线,这是无数条可以分类的直线中最完美的,因为它恰好在两个类的中间,距离两个类的点都一样远。而所谓的Support vetor 就是这些离分界线最近的点。如果去掉这些点,直线多半会改变位置,所以说这些vector(点)support(定义了)machine(分类器)

分类算法:支持向量机(SVM)是一个分类算法(机器学习中经常把算法称为一个“机器”),它的目标是找到图中实线所表示的决策边界,也称为超平面(Hyperplane)

支持向量(Support vectors):支持向量就是图中虚线穿过的数据点(两个×与一个o),直观上来看,它们确定了超平面的位置——超平面与过同一类的两个支持向量(两个×)的直线平行,并且两类支持向量到超平面的距离相等.

与logistic回归的对比:SVM与logistic回归用的是相同的模型,但是处理方式不一样——logistic回归用概率的方式求解模型(最大似然估计),SVM从几何的角度解析;另外在logistic回归中,每一个数据点都会对分类平面产生影响,在SVM中它却只关注支持向量(如果支持向量无变化,增加或者删除一些远处的数据点,产生的超平面还是一样的)——所以产生了这两个不同的算法,但是它们还是比较相似的.

一般SVM有下面三种:
  • 硬间隔支持向量机(线性可分支持向量机):当训练数据线性可分时,可通过硬间隔最大化学得一个线性可分支持向量机。
  • 软间隔支持向量机:当训练数据近似线性可分时,可通过软间隔最大化学得一个线性支持向量机。
  • 非线性支持向量机:当训练数据线性不可分时,可通过核方法以及软间隔最大化学得一个非线性支持向量机。

2. 硬间隔支持向量机

给定训练样本集D={(x1,y1),(x2,y2),,(xn,yn)}

yi{+1,1}i表示第 i个样本, n表示样本容量。分类学习最基本的想法就是基于训练集 D

在特征空间中找到一个最佳划分超平面将正负样本分开,而SVM算法解决的就是如何找到最佳超平面的问题。

该分类决策函数也称为线性可分支持向量机。 

在测试时对于线性可分支持向量机可以用一个样本离划分超平面的距离来表示分类预测的可靠程度,如果样本离划分超平面越远则对该样本的分类越可靠,反之就不那么可靠。
那么,什么样的划分超平面是最佳超平面呢?

对于有A、B、C三个超平面,很明显应该选择超平面B,也就是说超平面首先应该能满足将两类样本点分开。

扫描二维码关注公众号,回复: 2249247 查看本文章



对于图2的A、B、C三个超平面,应该选择超平面C,因为使用超平面C进行划分对训练样本局部扰动的“容忍”度最好,分类的鲁棒性最强。例如,由于训练集的局限性或噪声的干扰,训练集外的样本可能比图2中的训练样本更接近两个类目前的分隔界,在分类决策的时候就会出现错误,而超平面C受影响最小,也就是说超平面C所产生的分类结果是最鲁棒性的、是最可信的,对未见样本的泛化能力最强。



1 数学建模

求解这个”决策面”的过程,就是最优化。一个最优化问题通常有两个基本的因素:

1)目标函数,也就是你希望什么东西的什么指标达到最好;

2)优化对象,你期望通过改变哪些因素来使你的目标函数达到最优。在线性SVM算法中,目标函数显然就是那个”分类间隔”,而优化对象则是决策面。所以要对SVM问题进行数学建模,首先要对上述两个对象(”分类间隔”和”决策面”)进行数学描述。按照一般的思维习惯,我们先描述决策面。

数学建模的时候,先在二维空间建模,然后再推广到多维。

1)分类间隔 方程


我们将能够正确划分正负样本的超平面的表达式定义为: 

我们已经知道间隔的大小实际上就是支持向量对应的样本点到决策面的距离的二倍。那么图中的距离d我们怎么求?我们高中都学过,点到直线的距离距离公式如下:

 
公式中的直线方程为Ax0+By0+C=0,点P的坐标为(x0,y0)。 现在,将直线方程扩展到多维,求得我们现在的超平面方程,对公式进行如下变形:

2) 最大间隔分类器

我们已经顺利获得了目标函数的数学形式。但是为了求解w的最大值。我们不得不面对如下问题:

  • 我们如何判断超平面是否将样本点正确分类?
  • 我们知道相求距离d的最大值,我们首先需要找到支持向量上的点,怎么在众多的点中选出支持向量上的点呢?

上述我们需要面对的问题就是约束条件,也就是说我们优化的变量d的取值范围受到了限制和约束。事实上约束条件一直是最优化问题里最让人头疼的东西。但既然我们已经知道了这些约束条件确实存在,就不得不用数学语言对他们进行描述。但SVM算法通过一些巧妙的小技巧,将这些约束条件融合到一个不等式里面。

这个二维平面上有两种点,我们分别对它们进行标记:

  • 红颜色的圆点标记为1,我们人为规定其为正样本;
  • 蓝颜色的五角星标记为-1,我们人为规定其为负样本。

对每个样本点xi加上一个类别标签yi:

如果我们的超平面方程能够完全正确地对上图的样本点进行分类,就会满足下面的方程:


如果我们要求再高一点,假设决策面正好处于间隔区域的中轴线上,并且相应的支持向量对应的样本点到决策面的距离为d,那么公式进一步写成:

上述公式的解释就是,对于所有分类标签为1的样本点,它们到直线的距离都大于等于d(支持向量上的样本点到超平面的距离)。对于所有分类标签为-1的样本点,它们到直线的距离都小于等于d。公式两边都除以d,就可以得到:

            

因为||w||和d都是标量。所上述公式的两个矢量,依然描述一条直线的法向量和截距。


上述两个公式,都是描述一条直线,数学模型代表的意义是一样的。现在,让我们对wd和γd重新起个名字,就叫它们w和γ。因此,我们就可以说:"对于存在分类间隔的两类样本点,我们一定可以找到一些超平面面,使其对于所有的样本点均满足下面的条件:

上述方程即给出了SVM最优化问题的约束条件。这时候,可能有人会问了,为什么标记为1和-1呢?因为这样标记方便我们将上述方程变成如下形式:     

正是因为标签为1和-1,才方便我们将约束条件变成一个约束方程,从而方便我们的计算。

SVM函数间隔中, γ̂ =y(wTx+b)=yf(x)中的y是只取1和-1 吗?y的唯一作用就是确保函数间隔的非负性?

这个问题将问题搞混了。y是个分类标签,二分时,y就取了两个值,而刚好取了-1和1。只是因为用超平面分类时,不同的类中的点的函数值刚好有不同的符号,所以这里就用符号来进行了分类。
具体阐述如下:
1. 对于二类问题,因为y只取两个值,这两个是可以任意取的,只要是取两个值就行;
2. 支持向量机去求解二类问题,目标是求一个特征空间的超平面;而超平面分开的两类对应于超平面的函数值的符号是刚好相反的;
3. 基于上述两种考虑,为了使问题足够简单,我们取y的值为1和-1;
4. 在取定分类标签y为-1和1之后,一个平面正确分类样本数据,就相当于用这个平面计算yf(x)>0
5. 并且这样一来,yf(x)也有了明确的几何含义;

总而言之要明白,二类问题的标签y是可以取任意两个值的,不管取怎样的值对于相同的样本点,只要分类相同,所有的y的不同取值都是等价的。之所以取某些特殊的值,只是因为这样一来计算会变得方便,理解变得容易。svm中y取1或-1的历史原因是因为感知器最初的定义,实际取值可以任意,总能明确表示输入样本是否被误分,但是用+1、-1可以起码可以是问题描述简单化、式子表示简洁化、几何意义明确化。
举个例子:如果取y为1与2(比如原来取-1的现在取1,原来取1的现在取2 ),那么分类正确的判定标准就变成了(y1.5)f(x)>0所以取1和-1只是为了计算简单方便,没有实质变化,更非一定必须取一正一负。

接下来的问题是,如何确定这个超平面呢?从直观上而言,这个超平面应该是最适合分开两类数据的直线。而判定“最适合”的标准就是这条直线离直线两边的数据的间隔最大。所以,得寻找有着最大间隔的超平面。

3) 线性SVM优化问题基本描述

现在整合一下思路,我们已经得到我们的目标函数:

我们的优化目标是是d最大化。我们已经说过,我们是用支持向量上的样本点求解d的最大化的问题的。那么支持向量上的样本点有什么特点呢?

现在我们就可以将我们的目标函数进一步化简:


因为,我们只关心支持向量上的点。随后我们求解d的最大化问题变成了||w||的最小化问题。进而||w||的最小化问题等效于

为什么要做这样的等效呢?这是为了在进行最优化的过程中对目标函数求导时比较方便,但这绝对不影响最优化问题最后的求解。我们将最终的目标函数和约束条件放在一起进行描述:


这里n是样本点的总个数,缩写s.t.表示”Subject to”,是”服从某某条件”的意思。上述公式描述的是一个典型的不等式约束条件下的二次型函数优化问题,同时也是支持向量机的基本数学模型。


3. 软间隔支持向量机

在现实任务中很难找到一个超平面将不同类别的样本完全划分开,即很难找到合适的核函数使得训练样本在特征空间中线性可分。退一步说,即使找到了一个可以使训练集在特征空间中完全分开的核函数,也很难确定这个线性可分的结果是不是由于过拟合导致的。解决该问题的办法是在一定程度上运行SVM在一些样本上出错,为此引入了“软间隔”(soft margin)的概念,如图4所示:


4. 非线性支持向量机

现实任务中原始的样本空间D中很可能并不存在一个能正确划分两类样本的超平面。如图中所示的问题就无法找到一个超平面将两类样本进行很好的划分。 对于这样的问题可以通过将样本从原始空间映射到特征空间使得样本在映射后的特征空间里线性可分。

其实核函数的本质作用可以简练概括为:将低维空间的线性不可分类问题,借助核函数转化为高维空间的线性可分,进而可以在高维空间找到分类的最优边界(超平面)。(下图引自July‘s 支持向量机通俗导论(理解SVM的三层境界))。若要要分类下图红色和蓝色样本点:

              

                  二维线性不可分                                                                   三维线性可分


核方法

用于产生非线性分类边界。
linear,线性核,会产生线性分类边界,一般来说它的计算效率最高,而且需要数据最少。线性函数。

from sklearn import svm
svc = svm.SVC(kernel='linear')
svc.fit(X, y)

poly,多项式核,会产生多项式分类边界。多项式函数。

svc = svm.SVC(kernel='poly',degree=4)
svc.fit(X, y)

rbf,径向基函数,也就是高斯核,是根据与每一个支持向量的距离来决定分类边界的,它能映射到无限维,是最灵活的方法,但是也需要最多的数据。容易产生过拟合问题。指数函数。

svc = svm.SVC(kernel='rbf', gamma=1e2)

猜你喜欢

转载自blog.csdn.net/zwqjoy/article/details/81003848