支持向量机理论部分

看了几天的支持向量机了,在这里记录一下自已的学习笔记

第一部分:支持向量机的定义

  • 支持向量机是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,看到这个二分类模型,我们可以与之前学过的二分类logistic回归做对比,然后下面那句话,定义在特征空间上的间隔最大的线性分类器,这句话怎么理解呢?线性分类器是什么意思呢,比如令

    当g(x)>0时,f(x)=1,g(x)<0时,f(x)=-1,那么这里的f(x)就是一个线性分类器,注意:

    x是二维特征空间里的特征变量,现在线性分类器解决了,那么间隔最大是什么意思呢?间隔最大也就是这个分类器距离两类点,正例和负例的距离尽可能远(稍后我会画图来解释);然后他这个名字为什么叫支持向量机呢?因为它的目的是为了找出支持向量,找出支持向量就可以确定特征变量前面的系数w了(后面我们会知道只有支持向量它对应的是一个等式,等式才可以带入求解啊)

第二部分:支出向量机的分类与一些概念的引入

支持向量机分为三类线性可分支持向量机,线性支持向量机,非线性支持向量机

1、线性可分支持向量机

1.1线性可分支持向量机是指对于线性可分的数据集建立的支持向量机,那么什么是线性可分数据集呢?也就是存在一个超平面(记住这里是超平面,与后面的超曲面区分开),可以把数据集完全分开,完全分开的意思是能够把所有的正例都分类到正例里,所有的负例也都放在了负例里,也就是利用我们的线性分类器f(x)=sign(g(x))=sign(w’x+b)sign(w1x1+w2x2+b)不会出现分类错误,假设我们是在二维空间里。当然这个线性分类器有一个专有名词–感知机,顾名思义,感知机就是接受到了输入空间,也就是特征空间,然后输出为预测类别label,也就是我用我这个模型,来判断输入的特征变量值是什么类别呢。

1.2上面我们介绍了什么是线性可分数据集,那么线性可分线性可分支持向量机是指对于线性可分的数据集建立的支持向量机,

支持向量机 分类 题目_数据集


这就是一张数据完全可分的图,看到这个图形的分隔线了吗?这个分隔线把两类数据完全分开了,当数据线性可分时,2维特征空间可知找到分隔直线,3维特征空间可以找到2维分隔平面,n维特征空间可以找到n-1维的一个东西,这个时候说不出来,我们把这n-1维的东西叫做超平面,超平面一侧的点为正例,一侧的点为负例。这里为了画图方便给出的是二维特征空间的一维分隔线的图,如上图该直线的上面的点都被判断为正例,直线下面的点被判断为负例,那么前面的线性分类器

支持向量机 分类 题目_算法_02


我们也把这个叫做分类函数,所以通过分类函数可知,因为判断结果为正例,所以f(x)>0,即

支持向量机 分类 题目_支持向量机_03


因为判定结果为负例,所以f(x)<0,即

支持向量机 分类 题目_支持向量机 分类 题目_04


那么自然而然中间那个分隔线处,f(x)=0,即不被判断为正例,也不被判断为负例,有f(x)=0,即

支持向量机 分类 题目_数据集_05


1、3线性可分支持向量机的构造

上面说了在二维上那我可以找到一个分隔超平面把样本点全部划分正确,但是这样的分割超平面往往是不唯一的,如下图所示

支持向量机 分类 题目_数据集_06


那么怎么选取最好的分隔超平面呢?支持向量机选择超平面的原则是选择最大间隔的分隔超平面,提到间隔这里引入间隔的概念

  • 函数间隔与几何间隔
    1.3.1 分隔超平面的方程为

    这里的w可以看做这个超平面的法向量,b可以看做截距项,那么一个点到这个平面的距离为,利用点到平面的距离公式,可以算出来距离为

    先把这个公式放在这里一会会用到,我们再在回顾一下(我这里是手写拍照的,因为我觉得手写比较省事,而且比较容易讲的清楚)




支持向量机 分类 题目_支持向量机_07


支持向量机 分类 题目_数据集_08


支持向量机 分类 题目_分类算法_09


支持向量机 分类 题目_支持向量机_10


2、线性支持向量机

定义线性支持向量机是针对近似线性可分的数据集建立的模型,数据集近似线性可分的意思是基本上可以把数据分好类,但是会有个别点出现判别误差,因为无法完全分开,比如不管分隔超平面在哪,都不能保证分隔超平面的每一侧只有一种类型的点,也就是会出现个别正例点落在负例点的那一侧,或者个别负例点落在正例点的那一侧,但是当把奇异点去掉之后数据又是线性可分的了。那么对于这种数据集,我们使用线性支持向量机(可以忍受个别奇异点的),对比前面的线性支持向量机是不能忍受奇异点的,不能出现判别错误的情况

支持向量机 分类 题目_支持向量机_11


上面这个图展示的就是数据不是线性可分的情况,正例里面混合着负例,原来的线性可分时的条件是

支持向量机 分类 题目_数据集_12


那么这里因为不是线性可分,所以存在个别点不满足函数间隔大于等于1的情况,如上图,那么对于奇异点一定有

支持向量机 分类 题目_算法_13


那么为了解决约束条件不符合的问题,在这里引入对于每个样本点都引入相应的松弛变量,

支持向量机 分类 题目_支持向量机 分类 题目_14


使得

支持向量机 分类 题目_数据集_15

  • 这里的松弛变量的大小反应了奇异值距离对应分隔边界的距离,也就是偏离的程度,那么这里加上了松弛变也就是为了把这个点拉到对应边界当中需要付出多大努力。
  • 我们自然希望付出的努力越小越好,也就是我们希望在付出很少代价时能够尽可能的满足间隔最大化
    当然如果我们对奇异值点的容忍能力高的话(也就是当数据集中出现正例在负例的里面,在负例的分隔边界里面)如上图,此时如果想要满足我们的约束条件函数间隔大于等于1,那么需要付出的代价就很大,也就是松弛变量的值会很大;如果我们对奇异值点的容忍能力很低的话(也就是奇异点在两个分隔边界内部,且距离各自的分隔边界很近),那么这个时候我们想要满足约束条件的话,就不用付出那么高的代价,松弛变量的值就很小

所以我们引入惩罚参数C(C>0)来代表模型对于奇异点的容忍程度,C越大,容忍度越低,我们的目标函数变为了

支持向量机 分类 题目_分类算法_16

  • 目标函数变成这样的原因是一方面我们想要在付出代价最少(代价少也可以理解为误分类的点少)的同时让几何间隔达到最大,这就是找出最好分隔超平面的依据啊。C控制松弛变量的大小是怎么体现的呢?当C增大时,为了让目标函数最小,松弛变量要变小

线性支持向量机的原始问题

跟线性可分支持向量机的原始问题类似,这里只是目标函数当中加入了松弛变量项,线性不可分的线性支持向量机的学习问题变成了以下凸二次规划的问题

支持向量机 分类 题目_支持向量机 分类 题目_17


同理可以变为对偶问题,和上面的线性可分支持向量机的处理方法一样,用广义的拉格朗日乘子法,

以上原始最优化问题的拉格朗日函数为

支持向量机 分类 题目_算法_18


对偶问题是拉格朗日函数的极大极小问题

首先L对w,b,虚拟变量求极小值,然后再对a,u求极大值,即求偏导,令偏导为0

支持向量机 分类 题目_数据集_19


所以带入原来的L函数得到

支持向量机 分类 题目_支持向量机 分类 题目_20


然后再max minL,即得到原始问题的对偶问题

支持向量机 分类 题目_支持向量机_21


支持向量机 分类 题目_数据集_22


然后把ui消去得到

支持向量机 分类 题目_支持向量机_23


又因为凸优化问题是min

所有极大值乘以负1变为极小值

支持向量机 分类 题目_分类算法_24


在这里为了更好地理解支持向量,与在线性可分支持向量机的支持向量向量做对比

线性支持向量机的支持向量叫做软间隔的支持向量,

线性可分支持向量机的支持向量叫做硬间隔的支持向量,硬间隔的支持向量一定是在分隔边界上

支持向量机 分类 题目_算法_25


这一段是课本上的话,那么为什么是这样呢?尤其是后面的推理部分,因为敲公式比较麻烦,我手写了一下,在这里一定不要误解了判断是否分类正确的标准是什么,是函数间隔大于0,不要弄混成函数间隔大于1了,我们说的不是线性可分是存在某些点不满足函数间隔大于等于1,并没有说这些点是分类错了

支持向量机 分类 题目_算法_26


同线性可分支持向量机一样,当ai的最优解求出来以后,就可以利用下面一样的式子来求原始问题的最优解

支持向量机 分类 题目_数据集_27

  • 这里的w依赖ai>0的样本点,b依赖0<aj*<C,对应的样本点,大于0可以理解,大于0对应的数据点叫做支持向量,0不起作用,那么小于C怎么理解呢,小于C意味着在所有的支持向量当中只取在间隔边界上的点,为什么呢?因为只有间隔边界上的点才可以有一个等式啊,有等式才可以求解b啊,求b时只需要选择一个在分隔边界上的点(xj,yj)
  • 通过以上推理可知当软间隔的支持向量机都只在间隔边界上的话,且虚拟变量都为0的话,那么线性支持向量机也叫做线性可分支持向量机,着也说明了线性可分SVM是线性SVM的特例。我们以后统称线性SVM的最优化问题为
  • 支持向量机 分类 题目_分类算法_28


  • 支持向量机 分类 题目_数据集_29

  • 以上两部分的一个总结:对于线性可分的数据集和近似线性可分的数据集,我们可以通过线性支持向量机来处理分类的问题,线性支持向量机包括线性可分支持向量机。然后我们还要明白一个点,就是我们之所有要求函数间隔大于等于1,是为了把数据尽可能的分开,距离分隔超平面的距离尽可能远,那么当给定新样本时,错判的概率就会很小(新的数据点距离分隔超平面的距离远,那么我判断的准确度就会越高啊)

第三部分:非线性支持向量机

对解线性分类的问题,可以用线性支持向量机,但是对于非线性的数据,也就是无法通过分隔超平面来把数据在一定容忍度范围区分开,这个时候就使用非线性支持向量机

在真正介绍这个非信息支持向量机之前呢,想先用图形直观的展示一下,非线性的数据是什么样的,先看一个二维的情况

支持向量机 分类 题目_支持向量机_30


上面这个数据集就是非线性的数据集,只能用椭圆边界,来把这个数据集区分开,这个椭圆边界是曲线,不是直线,那么在高维 的情况下,如果能用一个超曲面把数据集完全区分开,那这个数据集叫做非线性可分数据集(非线性的,但是是可分的)

非线性问题往往不好求解,所以我们选取的方法是把非线性问题转化为线性问题

支持向量机 分类 题目_支持向量机 分类 题目_31


支持向量机 分类 题目_分类算法_32


支持向量机 分类 题目_分类算法_33


同理在求解w时,w依赖ai>0的样本点,求b时找出一个0<aj<C对应的样本点(xj,yj)来求解

第四部分:求解ai的最优值–序列最小最优化算法

以上三部分都归根到底要求ai的最优值,求解ai的最优值的最有效也是最常用的算法是序列最小最优化算法(SMO)

SMO算法要解以下的对偶问题

支持向量机 分类 题目_支持向量机_34


以下分析继续通过手写推理(嘿嘿嘿,先发以下,剩下的有空再写)