详解支持向量机SVM
详解支持向量机SVM
支持向量机预备知识
深入理解超平面
先来看下一维的实例
下面是一个只有x轴的一维坐标轴,该轴同样存在原点,x轴正方向和x轴反方向,且该轴上分布了很多点:
绿色的菱形坐标从左至右依次为:-5,-3,-1;红色的圈圈坐标从左到右依次为:2,3,5,6,7;此时,假如要求在坐标轴上找一个分割点,来分割红色的圆圈和绿色的菱形,而且要求只允许找一个点来分割这两部分样本,并且要求此点分割效果最好,如何去找呢?
答案: 在闭区间 (-1,2) 直接任取一点都可以将这两部分样本分开,且只能取这里面的点,而找到一个最有分割点,我只需要取最近的两个点的中间点即可,使最有分割点至两边的距离都最远。
再来看下二维的实例
如果是二维直角坐标系情况,现在要在正类(A、B、C、D、E)与负类(F、G、H)之间找一条直线来将两类样本点分开,如下如所示这样的线存在多条,要求寻找到一条划分效果最好,如何做呢?
答案: 先根据两点距离公式求两点之间的距离,经过计算得到了三对距离CF、CG、EG,那么此问题就转化为了在四个点C、E、F、G中找一条直线将两类样本效果最好的分开,只需在三对距离之间找到一个中点就好了,所以可以连线CF、CG、EG,找到它们的中点,然后连线,此问题解决。
简单来说,我们只需考虑两类距离最近的点分别到最优分割线的距离都最远即可。
以上问题转化为支持向量机的核心问题:
通俗理解就是要在两类样本点之间找一条直线(超平面)来将两类样本点分开,存在多条划分直线(超平面),那么如何求得这些直线(超平面),并且选出使划分效果最好的,如何做呢?
主要分为两步
(1)找到两类样本之间最近的那一部分点(用距离公式,高维空间也适用)
(2)找到一条直线(高维空间称之为超平面)使得(1)中最近的那些样本点到此直线(或超平面)的距离相等且尽量最大,此处可以用“点到直线(超平面)的距离”来解决,并且由于要把两类样本分开,所以必然一部分样本点在直线上方,一部分在直线下方,根据直线的规律可知(斜率大于0),若(x0,y0)在直线上方,则满足Ax0+By0+C>0,若(x0,y0)在直线下方,则满足Ax0+By0+C<0。
对于更高维的问题:引入超平面
二维空间里面,一条直线的方程可以表示为:Ax+By+C=0
三维空间里面,平面的方程可以表示为:Ax+By+Cz+D=0
依次推广,n维空间的超平面方程可以表示为
w1x1+w2x2+w3x3+w4x4+…+wnxn+b=0
此处用x1、x2、x3、…、xn来表示n维坐标系,各个维度的系数此处也可以用w1、w2、w3、…、wn来表示。
间隔最大化
找到两类样本点之间离得最近的那一部分点(称之为支持向量),并将问题同样转化为找到中间一个超平面将这部分样本点划分开,此时又涉及到这些样本点到超平面的距离(即支持向量到超平面的距离),关于样本点到超平面的距离,可以如下去通俗的理解:
(1)点到平面距离的推导
(2)点到超平面的距离
(3)函数间隔
(4)几何间隔
(5)支持向量
(6)间隔边界
(7)间隔最大化
间隔最大化最优值求解方法
经过之前的分析,我们得到了线性可分支持向量机学习的最优化问题,即原始问题:
凸优化
拉格朗日乘数法
上述优化函数是一个比较典型的有限制条件的求多元函数极值的问题,为了求解此最优化函数,需要应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。那么下面,首先将简单证明下等式条件下拉格朗日乘数法的来历和KKT条件的数学推理。
拉格朗日乘数法基本思想
拉格朗日乘子法作为一种优化算法,主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题。拉格朗日乘子背后的数学意义是其为约束方程梯度线性组合中每个向量的系数(或者说,拉格朗日乘子是约束条件边界直线的法向量与目标函数等高线的法向量是共线向量)。
如何将一个含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题?
拉格朗日乘数法从数学意义入手,通过引入拉格朗日乘子建立极值条件,对n个变量分别求偏导对应了n个方程,然后加上k个约束条件(对应k个拉格朗日乘子)一起构成包含了(n+k)变量的(n+k)个方程的方程组问题,这样就能根据求方程组的方法对其进行求解。
通过一个简单的实例看一下:
通过实例理解了拉格朗日乘数法的思后,下面证明下拉格朗日乘子法:
拉格朗日乘数法的基本形式
为求函数
在满足
下的条件极值,将其可以转化为函数
的无条件极值问题。
拉格朗日乘数法与KKT条件(针对不等式约束)
KKT条件的意义:它是一个非线性规划(Nonlinear Programming)问题能有最优化解法的必要和充分条件。
上述讨论的问题均为等式约束优化问题,但是此时仍旧解决不了约束条件是不等式约束的情况,解决此问题不光需要引入拉格朗日乘子,还需要引入一个KKT条件,而拉格朗日乘数法增加了KKT条件之后便可以用拉格朗日乘数法来求解不等式约束的优化问题了。
所有的不等式约束问题可以如下的表示:
不等式约束分两种情况来讨论:
第一种是极小值点落在可行域内(不包含边界)
第二种是极小值点落在可行域外(包含边界)
总结:
简单总结一下
对于无约束的优化问题,直接令梯度等于0求解。
对于含有等式约束的优化问题,拉格朗日乘子法,构造拉格朗日函数,令偏导为0求解。
对于含有不等式约束的优化问题,同样构造拉格朗日函数,利用KKT条件求解。
拉格朗日对偶性
上节介绍了拉格朗日乘子法和KKT条件,下面总结下拉格朗日对偶性的问题。在约束优化问题中,常常用拉格朗日对偶性来将原始问题转为对偶问题,通过解对偶问题的解来得到原始问题的解。
为什么要利用对偶?
(1)首先要明确,对偶问题的解不一定直接等于原问题的解(弱对偶),但是,对偶问题有两点性质。
(2)满足某些条件时,对偶问题直接等于原问题的解(强对偶)
(3)无论原始问题是否是凸的,对偶问题都是凸优化问题
显然,在某些情况下,直接对对偶问题求解可以得到原问题的解,而且对偶问题是凸优化,易于求解。所以利用对偶来求解是很有用的。
这样做的优点在于:一者对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。
原始问题如下:
对偶问题如下:
原始问题和对偶问题的关系:
间隔最大化最优值求解
求解间隔最大化最优值问题,就可应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。这样做的优点,一是对偶问题往往更容易求解,二是自然引入核函数,进而推广到非线性分类问题。
原始问题
构建拉格朗日函数
对偶算法
实现步骤:
下面阐述得到以上两式的计算过程,由KKT条件得:
补充:
1.KKT条件
2.序列最小最优化算法(sequential minimal optimization,SMO)
来求解对偶问题:
支持向量机
线性可分支持向量机
定义
算法过程
线性可分SVM的学习方法对于非线性的数据集是没有办法使用的, 有时候不能线性可分的原因是线性数据集里面多了少量的异常点,由于这些异常点导致了数据集不能线性可分, 下一节的线性SVM的软间隔最大化解决此问题。
线性支持向量机
有时候本来数据的确是可分的,也就是说可以用 线性分类SVM的学习方法来求解,但是却因为混入了异常点,导致不能线性可分。通常情况是,训练数据中有一些特异点(outlier)。将这些特异点除去后,剩下大部分的样本点组成的集合是线性可分的。如下图:
软间隔最大化
软间隔最大化目标函数的求解
下面阐述得到以上两式的计算过程,由KKT条件得:
软间隔最大化时的支持向量
非线性支持向量机
核技巧
左图分类问题无法用直线(线性模型)将正负实例正确分开,但可以用一条椭圆曲线(非线性模型)将它们正确分开。
如果能用一个超曲面将正负例正确分开,则称这个问题为非线性可分问题。非线性问题往往不好求解,所以希望能用解线性分类问题的方法解决这个问题。所采取的方法是进行一个非线性变换,将非线性问题变换为线性问题,通过求解线性问题来求解原问题。
核技巧应用到SVM,基本想法是通过一个非线性变换将输入空间对应于一个特征空间,使得输入空间中的超曲面对应于特征空间H的超平面。这样,分类问题的学习任务通过在特征空间中求解线性SVM就可以完成。
核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数好在它在低维上进行计算,而将实质上的分类效果(利用了内积)表现在了高维上,这样避免了直接在高维空间中的复杂计算,真正解决了SVM线性不可分的问题。
分类SVM总结
引入了核函数后,我们的SVM算法才算是比较完整了。现在我们对分类SVM的算法过程做一个总结,不再区别是否线性可分。
算法流程
线性支持回归
SVM回归模型的损失函数
SVM回归模型目标函数求解
求解步骤:
SVM算法的主要优点有:
解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。
仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。
有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。
样本量不是海量数据的时候,分类准确率高,泛化能力强。
SVM算法的主要缺点有:
如果特征维度远远大于样本数,则SVM表现一般。
SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用。
非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。
SVM对缺失数据敏感。