svm支持向量机 学习笔记

1简介

支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本非线性高维模式识别 中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。

支持向量机方法是建立在统计学习理论的VC维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(或称泛化能力)。

概念

  • 支持向量:就是支持或支撑平面上把两类类别划分开来的超平面的向量点
  • 机:方法
  • 监督学习:计算机学习已经创建好的分类系统,SVM最好的监督学习方法(深度学习)
  • 非监督学习:没有可以学习的样本

2介绍

用二维的例子解释SVM,可以拓展到n维

如何区分线性可分和线性不可分

  • 寻找超平面(1,2,3,....n维)
  • 超平面所有的变量的偏导数为常数就说这个样本线性可分

2.1线性可分

二维情况下:就是可以用一条或几条直线把属于不同类别的样本点分开
N维情况下:就是可以用一个超平面(线,面,超平面,n-1维)来分隔两类点

svm支持向量机 学习笔记_第1张图片

如何找到最优的那条直线?是需要解决的问题

方法如下:

从直观上来说,就是分割的间隙越大越好,把两个类别的点分得越开越好。就像我们平时判断一个人是男还是女,就是很难出现分错的情况,这就是男、女两个类别之间的间隙非常的大导致的,让我们可以更准确的进行分类。
在SVM中,称为Maximum Marginal,是SVM的一个理论基础之一
上图被红色和蓝色的线圈出来的点就是所谓的支持向量!

上图就是线性方程,可以得出M:

另外支持向量位于wx + b = 1与wx + b = -1的直线上,我们在前面乘上一个该点所属的类别y(还记得吗?y不是+1就是-1),就可以得到支持向量的表达式为:y(wx + b) = 1,这样就可以更简单的将支持向量表示出来了。

至此二维已经能求出w和b的值,我们扩展到n维空间里:
我们要优化求解的表达式:

||w||的意思是w的二范数(空间两个向量的直线距离),这两个式子是等价的,之所以要写成这样是为了后边的求导
这个式子有还有一些限制条件,完整的写下来,应该是这样的:

这个其实是一个带约束的二次规划(quadratic programming, QP)问题,是一个凸问题,凸问题就是指的不会有局部最优解,可以想象一个漏斗,不管我们开始的时候将一个小球放在漏斗的什么位置,这个小球最终一定可以掉出漏斗,也就是得到全局最优解。s.t.后面的限制条件可以看做是一个凸多面体,我们要做的就是在这个凸多面体中找到最优解。

转化为对偶问题,优化求解

这个优化问题可以用拉格朗日乘子法去解,使用了KKT条件的理论,这里直接作出这个式子的拉格朗日目标函数:

首先让L关于w,b最小化,分别令L关于w,b的偏导数为0,得到关于原问题的一个表达式:

将两式带回L(w,b,a)得到对偶问题的表达式

新问题加上其限制条件是(对偶问题):

这个就是我们需要最终优化的式子。至此,得到了线性可分问题的优化式子。

得出这个式子完全是为了以后的优化计算而来,有很多方法,如SMO(序列最小最优化)等

2.2线性不可分

方法一:用曲线分隔开(核函数)

让空间从原本的线性空间变成一个更高维的空间,在这个高维的线性空间下,再用一个超平面进行划分。

当维度增加到无限维的时候,一定可以让任意的两个物体可分了
因为两个不同的物体肯定有不同的特征
下图是一个典型的线性不可分的情况

事实上,上图所述的这个数据集,是用两个半径不同的圆圈加上了少量的噪音生成得到的,所以,一个理想的分界应该是一个“圆圈”而不是一条线(超平面)。如果用 X1 和 X2 来表示这个二维平面的两个坐标的话,我们知道一条二次曲线(圆圈是二次曲线的一种特殊情况)的方程可以写作这样的形式:

Alt text

注意上面的形式,如果我们构造另外一个五维的空间,其中五个坐标的值分别为 $Z_1=X_1, Z_2=X_1^2, Z_3=X_2, Z_4=X_2^2, Z_5=X_1X_2$,那么显然,上面的方程在新的坐标系下可以写作:

Alt text

这个列子为了直观比较特殊,不用投射到五维空间,用三维空间即可得到:
$Z_1=X^2_1, Z_2=X_2^2, Z_3=X_2 $
那么在新的空间中原来的数据将变成线性可分的,从而使用之前我们推导的线性分类算法就可以进行处理了。这正是 Kernel 方法处理非线性问题的基本思想。

核函数

用线性可分情况下优化的公式:

我们可以将红色这个部分进行改造,令:

这个式子所做的事情就是将线性的空间映射到高维的空间,k(x, xj)有很多种,下面是比较典型的两种:

上面这个核称为多项式核,下面这个核称为高斯核,高斯核甚至是将原始空间映射为无穷维空间,另外核函数有一些比较好的性质,比如说不会比线性条件下增加多少额外的计算量,等等,这里也不再深入。一般对于一个问题,不同的核函数可能会带来不同的结果,一般是需要尝试来得到的。

常用核函数

上面这个核称为多项式核,下面这个核称为高斯核,高斯核甚至是将原始空间映射为无穷维空间,另外核函数有一些比较好的性质,比如说不会比线性条件下增加多少额外的计算量,等等,这里也不再深入。一般对于一个问题,不同的核函数可能会带来不同的结果,一般是需要尝试来得到的。

还有一个线性核,这实际上就是原始空间中的内积。这个核存在的主要目的是使得“映射后空间中的问题”和“映射前空间中的问题”两者在形式上统一起来了(意思是说,咱们有的时候,写代码,或写公式的时候,只要写个模板或通用表达式,然后再代入不同的核,便可以了,于此,便在形式上统一了起来,不用再分别写一个线性的,和一个非线性的)。

核函数本质

上面说了这么一大堆,读者可能还是没明白核函数到底是个什么东西?我再简要概括下,即以下三点:

  1. 实际中,我们会经常遇到线性不可分的样例,此时,我们的常用做法是把样例特征映射到高维空间中去(如上文2.2节最开始的那幅图所示,映射到高维空间后,相关特征便被分开了,也就达到了分类的目的);
  2. 2.但进一步,如果凡是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的(如上文中19维乃至无穷维的例子)。那咋办呢?

  3. 此时,核函数就隆重登场了,核函数的价值在于它虽然也是讲特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。

方法二:用直线分隔开(不用去保证可分性)(软间隔)

  • 欠拟合
  • 过拟合

数据中的一些特殊值是噪声

条件限制公式:

  • C是一个由用户去指定的系数,表示对分错的点加入多少的惩罚,当C很大的时候,分错的点就会更少,但是过拟合的情况可能会比较严重,当C很小的时候,分错的点可能会很多,不过可能由此得到的模型也会不太正确,所以如何选择C是有很多学问的,不过在大部分情况下就是通过经验尝试得到的。
  • 加入惩罚函数:我们可以为分错的点加上一点惩罚,对一个分错的点的惩罚函数就是这个点到其正确位置的距离

接下来就是同样的,求解一个拉格朗日对偶问题,得到一个原问题的对偶问题的表达式:

蓝色的部分是与线性可分的对偶问题表达式的不同之处。在线性不可分情况下得到的对偶问题,不同的地方就是α的范围从[0, +∞),变为了[0, C],增加的惩罚ε没有为对偶问题增加什么复杂度。

3结构风险

模型与真实值之间的误差叫做风险

使用分类器在样本数据上的分类的结果与真实结果之间的差值来表示。这个差值叫做经验风险,在骁样本上可以保证没有误差,但是真实值之间不可能保证

以前的机器学习方法都把经验风险最小化作为努力的目标,但后来发现很多分类函数能够在样本集上轻易达到100%的正确率,在真实分类时却一塌糊涂,即所谓的推广能力差,或泛化能力差

泛化误差界,由两部分刻画:

  • 经验风险,代表了分类器在给定样本上的误差
  • 置信风险,代表了我们在多大程度上可以信任分类器在未知文本上分类的结果

    • 样本数量,显然给定的样本数量越大,我们的学习结果越有可能正确,此时置信风险越小
    • 分类函数的VC维,显然VC维越大,推广能力越差,置信风险会变大

泛化误差界的公式为:

R(w)≤Remp(w)+Ф(n/h)

公式中R(w)就是真实风险,Remp(w)就是经验风险,Ф(n/h)就是置信风险。
统计学习的目标从经验风险最小化变为了寻求经验风险与置信风险的和最小,即结构风险最小。
SVM正是这样一种努力最小化结构风险的算法。

VC维

定义:对一个指标函数集,如果存在H个样本能够被函数集中的函数按所有可能的2的H次方种形式分开,则称函数集能够把H个样本打散;函数集的VC维就是它能打散的最大样本数目H。​

二维:VC维为3

VC维反映了函数集的学习能力,VC维越大则学习机器越复杂(容量越大),遗憾的是,目前尚没有通用的关于任意函数集VC维计算的理论,只对一些特殊的函数集知道其VC维。例如在N维空间中线形分类器和线形实函数的VC维是N+1。(通过2维的推导)

  • 小样本 : 并不是说样本的绝对数量少(实际上,对任何算法来说,更多的样本几乎总是能带来更好的效果),而是说与问题的复杂度比起来,SVM算法要求的样本数是相对比较少的。

  • 是指SVM擅长应付样本数据线性不可分的情况,主要通过松弛变量(也有人叫惩罚变量)和核函数技术来实现,这一部分是SVM的精髓,以后会详细讨论。多说一句,关于文本分类这个问题究竟是不是线性可分的,尚没有定论,因此不能简单的认为它是线性可分的而作简化处理,在水落石出之前,只好先当它是线性不可分的(反正线性可分也不过是线性不可分的一种特例而已,我们向来不怕方法过于通用)。

  • 高维模式识别是指样本维数很高,例如文本的向量表示,如果没有经过另一系列文章(《文本分类入门》)中提到过的降维处理,出现几万维的情况很正常,其他算法基本就没有能力应付了,SVM却可以,主要是因为SVM 产生的分类器很简洁,用到的样本信息很少(仅仅用到那些称之为“支持向量”的样本,此为后话),使得即使样本维数很高,也不会给存储和计算带来大麻烦
  • VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC维越高,一个问题就越复杂。

你可能感兴趣的:(svm,支持向量机)