支持向量机(Support Vector Machine),一般简称SVM,它是个二分类的分类模型,即给定一个包含正例和反例的样本集合(有监督的机器学习算法),支持向量机的目的是寻找一个超平面来将样本中的正例和反例用分开,其原则是使正例和反例之间的间隔最大。
最优分类超平面
什么是超平面?
- 在一维空间,超平面是一个点
- 在二维空间,它是一条线
- 在三位空间,它是一个面
- 在更高维度上,你能够称它为超平面
什么是最优分类超平面?
最优超平面将是拥有最大边距的那个超平面。
什么是间隔?
给定一个超平面,我们能够计算出超平面到最近的一个点的距离。一旦我们算出这个值,如果我们将距离乘以2我们就可以得到间隔(margin)。
什么是支持向量?
支撑向量本质是向量,而这些向量却起着很重要的作用,如果做分类,他们就是离分界线最近的向量,也就是说分界面是靠这些向量确定的,他们支撑着分类面;就是离最优分类平面最近的离散点,也可以称为向量。
支持向量机的目标是找出能够最大化训练集数据间隔(margin)的最优分类超平面。学习的目标是在特征空间中找到一个分类超平面wx+b=0,分类面由法向量w和截距b决定。分类超平面将特征空间划分两部分,一部分是正类,一部分是负类。法向量指向的一侧是正类,另一侧为负类。给定一个二分类问题的训练样本集如下:
由于这些数据是线性可分的,所以可以用一条直线将这两类数据分开,这条直线就相当于一个超平面,超平面一边的数据点所对应的 y 全是-1 ,另一边所对应的 y 全是1,我们的目标是找到一条分界线/超平面来将两类区分开,如下图:
在样本空间中,超平面可以通过以下线性方程来描述:
其中,w=()为法向量,决定了超平面的方向;b为位移项,决定了超平面与原点的距离,如果一个超平面能够将训练样本正确分类,则我们希望这个超平面具有的性质是,对于()∈D,有:
这个式子也是我们在得到超平面之后预测一个新样本的判决条件。显然,上图中有5个超平面都满足要求。但是,哪一个是最好的呢?直观上看,应该去找位于两类训练样本“正中间”的超平面,即上图中最粗的分界线。因为这条线能够在最大程度上容忍两类的数据波动和噪声。因此,为了能够得到“正中间”位置的超平面,我们将上述条件变得更加严格:
显然,条件严格后,靠近样本边缘的一些超平面可能会不符合要求,最后会剩下比较靠中间的几个超平面。那么,如何选出最“正中间”的那个超平面呢?我们可以给一个具体的量化目标:让超平面与最近的样本的距离最大。如下图所示,距离超平面最近的这几个样本点可以使得公式 (1) 的等号成立,它们被称为“支持向量”(Support Vector)
所以,样本空间中任意点x到超平面的距离的计算公式为:
因此,两类的支持向量到超平面的距离之和为2w,这就是“间隔”(margin),如果想找到具有“最大间隔”(maximum margin)的超平面,那么需要最小化。因此,最后需要求解的问题为:
这就是支持向量机(Support Vector Machine,SVM)的基本型。
对偶问题
因为现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题。
此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量 (dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(dual problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一者对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。
那什么是拉格朗日对偶性呢?简单来讲,通过给每一个约束条件加上一个拉格朗日乘子(Lagrange multiplier),定义拉格朗日函数(通过拉格朗日函数将约束条件融合到目标函数里去,从而只用一个函数表达式便能清楚的表达出我们的问题):
简单总结:和感知机的对偶求解类似,SVM也是通过样本的线性加权和来求解w和b,进而得到SVM的最优解。我们注意到,在利用对偶求解的过程中,是要利用两个样本的内积来求解的,这就为核函数的使用埋下了伏笔。
核函数
左图为原始空间,很明显的圆圈内是一类,圆圈是一类,此时单纯用线性分类器是无法有效分类的,因此有没有办法找到一个非线性分类器让两类可以分开。
核函数(kernel functions)是机器学习里的一个常用技巧,它接收两个样本的特征向量,给出一个标量;这个标量可以理解成把两个特征向量通过一个「隐藏的映射」变换到一个高维空间之后,再做内积的结果。核函数的作用就是隐含着一个从低维空间到高维空间的映射,而这个映射可以把低维空间中线性不可分的两类点变成线性可分的。
用 x , y 表示两个特征向量,K 表示核函数,φ 表示从特征空间到高维空间的隐藏映射,则有:
K ( x , y ) = < φ(x) , φ(y) >
其中 K ( x,y ) 就是一个kernel函数, < φ(x) , φ(y) >表示向量做内积,其中
此时可以经由简单的推导得到投影函数(φ),如下
此时已经将特征从2维空间转换到3维空间。
很明显只要一个Hyperplane(线性分类)就可以完美分类,如下左图(水蓝色的平面),而其对应到原始空间(下右图)则是中间分类的那个圆圈。
核函数和映射没有关系。核函数只是用来计算映射到高维空间之后的内积的一种简便方法。
核函数包括线性核函数、多项式核函数、高斯核函数等,其中高斯核函数最常用,可以将数据映射到无穷维,也叫做径向基核函数(Radial Basis Function 简称 RBF),具体有:
使用SVM算法的思路:
(1)简单情况,线性可分情况,把问题转化为一个凸优化问题,可以用拉格朗日乘子法简化,然后用既有的算法解决;
(2)复杂情况,线性不可分,用核函数将样本投射到高维空间,使其变成线性可分的情形,利用核函数来减少高纬度计算量。
参考链接:http://www.devtalking.com/articles/machine-learning-14/
参考链接:https://baijiahao.baidu.com/s?id=1618526683185169455&wfr=spider&for=pc
参考链接:https://www.cnblogs.com/guoyaohua/p/8855636.html
参考链接:http://www.devtalking.com/articles/machine-learning-14/
参考链接:https://murphypei.github.io/blog/2019/02/svm-kernel.html