SVM作为传统机器学习的一个非常重要的分类算法,它是一种通用的前馈网络类型,最早是由Vladimir N.Vapnik 和 Alexey 在1963年提出,目前的版本是Corinna Cortes 和 Vapnik在1993年提出,1995年发表。深度学习(2012)出现之前,SVM被认为是机器学习中近十几年最成功表现最好的算法。
支持向量机(support vector machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。通过给定训练样本,支持向量机建立一个超平面作为决策曲面,使得正例和反例的隔离边界最大化。
线性可分-linearly separable, 在二维空间可以理解为可以用一条直线(一个函数)把两类型的样本隔开,被隔离开来的两类样本即为线性可分样本。同理在高维空间,可以理解为可以被一个曲面(高维函数)隔开的两类样本。
函数间隔代表了特征是正例或是反例的确信度,如下
几何间隔代表向量点到超平面的距离,是高维距离,如下
2、原理
在二维空间中就是一条直线,在三维空间中就是一个平面,以此类推,如果不考虑空间维数,这样的线性函数统称为超平面。我们看一个简单的二维空间的例子,O代表正类,X代表负类,样本是线性可分的,但是很显然不只有这一条直线可以将样本分开,而是有无数条,我们所说的线性可分支持向量机就对应着能将数据正确划分并且间隔最大的直线。
(1)计算间隔,其实间隔就等于两个异类支持向量的差在 w 上的投影,类比几何间隔:
补充:为什么一定是一正一负样本?
因为是先找的点,在确定超平面,即我们是根据数据得到的模型参数。我们在分母上除以||w||,是把距离单位化,这样做相当于将超平面移至原点出,因此在间隔公式中也没有截距b 。
(2) 计算“约束”,正样本x+,负样本x-在超平面平行线上,满足下式:
(3) 代入间隔公式,得到用参数表示并化简的间隔
(4)SVM的思想是使得间隔最大化,我们统一成最小化
5)求解(推导)过程:
(1)拉格朗日函数
由于模型的参数求解问题,是带约束的,不能直接求参数。因此我们使用拉格朗日乘子法得到其对偶问题,该问题的拉格朗日函数可以写为:
(2)求w,b以便转化为对偶形式,方式是偏导为0:
(3) 将w,b代入原式,化为对偶形式
(4)根据KKT条件,求解对偶的新参数,KKT条件如下
因此,对于任意的训练样本(xi,yi)
非线性问题解决方案:对于非线性问题,线性可分支持向量机并不能有效解决,要使用非线性模型才能很好地分类。先看一个例子,如下图,很显然使用直线并不能将两类样本分开,但是可以使用一条椭圆曲线(非线性模型)将它们分开。非线性问题往往不好求解,所以希望能用解线性分类问题的方法求解,因此可以采用非线性变换,将非线性问题变换成线性问题。
核函数:将非线性空间映射成线性空间即可。其理论支撑是将训练样本从原始空间映射到一个更高维的空间,使得样本在这个空间中线性可分,如果原始空间维数是有限的,即属性是有限的,那么一定存在一个高维特征空间是样本可分。
我们发现:
若要对线性模型求解,会涉及到计算ϕ(xi)与ϕ(yi)。这是样本xi映射到特征空间之后的内积,由于特征空间的维数可能很高,甚至是无穷维,因此直接计算耗费很大,但反正内积不分家,不如直接做个转化,也不影响优化。于是公式化为
求解a后代入得
1)线性核
2)多项式核
3)高斯核
4)拉普拉斯核
5)sigmiod核
假设训练样本在样本空间或者特征空间中是线性可分的,但在现实任务中往往很难确定合适的核函数使训练集在特征空间中线性可分,退一步说,即使瞧好找到了这样的核函数使得样本在特征空间中线性可分,也很难判断是不是由于过拟合造成。
线性不可分意味着某些样本点 (xi,yi)不能满足间隔大于等于1的条件,样本点落在超平面与边界之间。为解决这一问题,可以对每个样本点引入一个松弛变量 ξi≥0 使得间隔加上松弛变量大于等于1。
(1)加入松弛变量,进而改变约束条件
(2)目标函数变为(像正则化)
线性支持向量机的学习问题变成如下凸二次规划问题的求解(原始问题):
(3)转化成对偶形式,其拉格朗日函数为
(4)令各参数偏导得零,解得:
(5)对偶问题为
(6)解得w,原式为
(7) KKT条件为
因此,对于任意的训练样本(xi,yi),总有 αi=0 或者 yif(xi)−1+ξi=0: