文章目录
SVM,中文名叫支持向量机。
在深度学习出现以前,它是数据挖掘的宠儿,SVM被认为机器学习近十几年最成功,表现最好的算法;
SVM具有十分完整的数据理论证明,但同时理论也相当复杂。
SVM既可以用于回归也可以用于分类问题。
SVM的英文全称是Support Vector Machines,我们叫它支持向量机。支持向量机是我们用于分类的一种算法。让我们以一个小故事的形式,开启我们的SVM之旅吧。
在很久以前的情人节,一位大侠要去救他的爱人,但天空中的魔鬼和他玩了一个游戏。魔鬼在桌子上似乎有规律放了两种颜色的球,说:"你用一根棍分开它们?要求:尽量在放更多球之后,仍然适用。
于是大侠这样放,干的不错?
然后魔鬼,又在桌上放了更多的球,似乎有一个球站错了阵营。显然,大侠需要对棍做出调整。
SVM就是试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙。这个间隙就是球到棍的距离
现在好了,即使魔鬼放了更多的球,棍仍然是一个好的分界线。
魔鬼看到大侠已经学会了一个trick(方法、招式),于是魔鬼给了大侠一个新的挑战。(线性不可分)
现在,大侠没有棍可以很好帮他分开两种球了,现在怎么办呢?当然像所有武侠片中一样大侠桌子一拍,球飞到空中。然后,凭借大侠的轻功,大侠抓起一张纸,插到了两种球的中间。(低维空间中线性不可分的转化到高维空间)
现在,从空中的魔鬼的角度看这些球,这些球看起来像是被一条曲线分开了。
再之后,无聊的大人们,把这些球叫做data(数据),把棍子叫做classifier(分类器), 找到最大间隙的trick(方法)叫做optimization(最优化),拍桌子叫做kernelling(核), 那张纸叫做hyperplane(分类超平面)。
1.SVM初识
SVM分类也是寻找合适的决策边界,为方便理解,以二分类为例。假设存在二分类样本,我们一定可以找到一个超平面将类别分开,但是通常会存在很多这样的超平面,如下图所示,那么到底取哪个?
直观来看,应该取H_3那条红线,因为这条线对样本的“容忍性”最好,也就是说样本发生微小变化,不会影响分类结果,但是其他细线,如果样本发生微小变化,都会使得分类结果发生变化,也就是说H_3作为决策边界,其鲁棒性最好。
SVM寻找区分两个类别的超平面,使得边际最大化。
边际:b11和b12之间的距离,叫做B1这条决策边界的边际(margin),也有叫“间隔”,记为d,当然也有把b11和B1的距离叫边际的.显然拥有更大的边际的决策边界泛化能力更强
支持向量
支持向量:与b11和b12相交的样本点叫支持向量(距离分类超平面最近的样本点,每个类别都有支持向量)
统计学习理论认为:间隔越大,决策超平面越稳定。何为间隔:就是所有样本点与分类平面的距离最小值。所以显然第二个分类平面更好。
2.向量内积-回顾
3.SVM分类
w∙x+b=0为决策边界的方程, w∙x+b=1和w∙x+b=−1为两个类别的边界。
4.转化为凸优化问题
5.非线性情况
在实际分类当中,我们会遇到非线性的情况。例如如下图所示
原先在一维空间中我们不可能画一个直线或者一个平面将样本点分类,通过转化到二维空间就变得线性可分。
总结:样本点在低维空间中线性不可分,通过将低维空间的非线性问题映射到高维空间中,就变成线性可分的。
接下来,我们再来看一个例子。如下图所示,样本点原先在二维空间中找不到一个直线将其分类(非线性情况),通过映射到三维空间。我们就可以很容易找到一个平面将其分隔开(线性情况)。
为什么低维数据升级到高维数据之后,就可以把低维度数据线性可分?
在提升维度后,原本非线性的数据点变得线性可分,这在数学上是有严格证明的,即Cover定理。。
Cover定理可以定性地描述为:将复杂的模式分类问题非线性地投射到高维空间将比投射到低维空间更可能是线性可分的,当空间的维数D越大时,在该空间的N个数据点间的线性可分的概率就越大。
所以人们就努力的寻找一种映射,这映射能将样本从原始空间(低维数据)转变到高维特征空间,从而把低维空间中线性不可分的两类点变成线性可分的。这种映射ϕ(X) 又可称为“特征构建”,映射后的向量可称之为“特征向量”。
非线性情况-映射问题
非线性情况-核函数
幸运的是,在计算中发现,我们需要的只是两个向量在新的映射空间中的内积结果,而映射函数到底是怎么样的其实并不需要知道。于是这样就引入了核函数的概念。
核函数事先在低维上计算,而将实质上的分类效果表现在了高维上,也就是
包含映射,内积,相似度的逻辑。
消除掉把低维向量往高维映射的过程。
避免了直接在高维空间内的复杂计算。
即核函数除了能够完成特征映射,而且还能把特征映射之后的内积结果直接返回
6.线性不可分
SVM的基本形态是一个硬间隔分类器,它要求所有样本都满足硬间隔约束(即函数间隔要大于1),所以当数据集有噪声点时,SVM为了把噪声点也划分正确,超平面就会向另外一个类的样本靠拢,这就使得划分超平面的几何间距变小,降低模型的泛化性能。除此之外,当噪声点混入另外一个类时,对于硬间隔分类器而言,这就变成了一个线性不可分的问题
硬间隔:完全分类准确,其损失值为0;只要找出两个异类正中间的那个平面;硬间隔的分类法其结果容易受少数点的控制,这是很危险的.
软间隔:允许一定量的样本分类错误;
目前为止,我们知道几乎所有数据都不那么“干净”。这时我们就可以通过引入所谓松弛变量(slack variable),来允许有些数据点可以处于分隔面的错误一侧。
在某些情况下,样本不是线性可分的,存在一些干扰的数据。如图存在一个红色的样本点和一个蓝色样本点分类错误的情况,但是出现分错的这些样本点是极个别的情况。
针对这种情况我们引入了松弛变量和惩罚系数。
7.松弛变量和惩罚系数
总结
松弛变量也就是个解决线性不可分问题的方法罢了,但是回想一下,核函数的引入不也是为了解决线性不可分的问题么?为什么要为了一个问题使用两种方法呢? 其实两者还有微妙的不同。一般的过程应该是这样,还以文本分类为例。在原始的低维空间中,样本线性的不可分,无论你怎么找分类平面,总会有大量的离群点,此时用核函数向高维空间映射一下,虽然结果仍然是不可分的,但比原始空间里的要更加接近线性可分的状态(就是达到了近似线性可分的状态),此时再用松弛变量处理那些少数“冥顽不化”的离群点,就简单有效得多啦。