支持向量机

来源:互联网 发布:淘宝魔切是什么 编辑:程序博客网 时间:2024/06/14 07:52

支持向量机(Support Vector Machine,SVM)是一种对线性和非线性数据进行分类的方法。简单来说,SVM就是一种算法,它大体上按照如下的方法工作:它使用一种非线性映射,把原训练数据映射到较高的维上。在新的维上,它搜索最佳分离超平面,以将两个类的数据分开。
下面我们具体来说一下。

1、数据线性可分的情况
首先来考察最简单的情况——两类问题,其中两个类是线性可分(直线)的。
直接看图理解


这里写图片描述
从这张图上,我们可以看到,这个2-D数据集被好几个分离超平面分割开了。
那么什么是分离超平面呢?
简单来说,分离超平面就是将一个类的元组与其他类分离的“决策边界”。而且它要比当前的空间低一个维度(例如,当前空间是一个2维平面,则分离超平面就是一条线)。

那么,在上图所示的2-D数据集中,有无限多个(可能的)分离超平面(用虚线表示的),那么这么多个分离超平面中,那个是最好的?这里我们就引出了支持向量边缘最大边缘超平面等概念。下面我们就具体说一说。

在n多个分离超平面中,我们想找出分离效果最好的一个,即我们希望该分离超平面是在检验集上具有最小分类误差的那一个。那我们如何找到这一个最佳分离超平面呢?
事实上,SVM是通过搜索最大边缘超平面来处理这个问题的。


这里写图片描述
如图所示,因为b图中的分离超平面(黑色的线)比a图中的分离超平面具有更大的最大边缘超平面(两条虚线,MMH),所以明显的,图b中的分离超平面具有更高的/泛化准确率,所以它更好。
其实这个很好理解,用中国人的话讲叫做“执中”。以江河为国界的时候,就是以航道中心线为界,这个就是最大边缘超平面的体现。换句话说,就是这个平面要尽量和两边保持距离,以留足余量,减小泛化误差,保证稳健性。
而落在边缘上的点或者说元组,我们称之为支持向量。可以理解的是,支持向量因为落在边缘上,所以从本质上来说,它是最难分类的元组。

这里写图片描述

OK,现在我们已经知道SVM是使用支持向量和边缘来发现该超平面的,那么到底该如何操作呢?
实际上,这里是使用数学技巧来求解的。我们的目的是寻找最优的分离超平面,那么这个问题就可以抽象成为一个被约束的(凸)二次最优化问题,这涉及拉格朗日公式和KKT,比较复杂。需要单独开篇讲解,这里就先跳过。
而一旦我们找出支持向量和MMH,我们就有了一个训练后的支持向量机。
在这里我为什么要强调支持向量?是因为MMH是由支持向量定义的,并且分类器的复杂度也是由支持向量数刻画的。若是经过严格的数学推导后,我们可以发现SVM的一个重要的性质:训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关
至此,一个线性SVM完成。它可以用来对线性可分的数据进行分类了。

数据线性不可分的情况
考虑如下情况。
这里写图片描述
在这种情况下,我们不可能找到一条将这些类分开的直线,因此不能用线性SVM分类器呢,那么我们该怎么办?

事实上,我们同样可以用线性SVM的思想去解决这一个问题,不过需要做一下变化,即对线性SVM进行扩展,为线性不可分的数据创建非线性的SVM。这种非线性的SVM能够发现输入空间中的非线性决策边界。

那么,我们如何进行扩展呢?
主要有两个步骤:
步骤一:我们用非线性映射把原输入数据变换到较高维空间;
步骤二:一旦将数据变换到较高维空间,我们就在新的空间搜索分离超平面。此时,问题又转化为一个二次优化问题,采用同线性SVM同样的思路进行求解。
非常辛运的是,如果原始空间是有限维,即属性数有限,那么一定存在一个高维特征空间使样本可分
在新空间(高维空间)找到的最大边缘超平面对应于原空间中的非线性分离超曲面

思路很简单,但是我们在实际操作中会遇到一些问题。
首先,如何选择到较高维空间的非线性映射?
其次,运算量会特别大。
其中,第二个问题,即运算量特别大是最最困扰我们的。

在这里,为了解决这个问题,我们又使用了另一种数学技巧,即使用核函数

使用核函数之后,原本我们需要在高维空间搜索分离超平面而进行的大量复杂运算都不存在了,因为我们可以把所有的计算都放在原空间上进行(即我们可以避免这种映射带来的巨大计算开销。因为我们实质上需要的只是内积而已。这点可以从数学上可以证明)。这使得我们不需要花费巨大的计算开销就能找到SVM的非线性分离超曲面。(因为,经过数学证明,我们可以知道,任何人一个核函数都隐式地定义了一个称为“再生核希尔伯特空间”的特征空间)

当然核函数有多种,包括h次多项式核函数,高斯径向基函数核函数,S型核函数

OK,通过前面的讨论我们知道,即便是非线性,我们也能使用线性的思维去解决它。我们所希望的是,样本在特征空间内线性可分,因此特征空间的好坏对SVM的性能是至关重要的。但这里又会出现一个新问题,即我们在不知道特征映射的形式时,我们也并不知道什么样的核函数是合适的,假如我们的核函数选择不合适,这就意味着我们将样本映射到了一个不合适的特征空间,这很有可能导致SVM的性能不佳。所以,实际上核函数的选择成为了支持向量机最大的变数。

虽然在实践中,我们发现核函数的选择一般并不导致结果准确率的很大差别,但这对于支持向量机来说,无疑是一个隐患。

在前面的讨论中,我们一直假定训练样本在样本空间或者特征空间中是线性可分的,即存在一个超平面能够将不同类的样本完全分开,然而,在现实任务中我们往往很难确定合适的核函数使得训练样本在特征空间中线性可分;退一步说,即便我们恰好找到了某个核函数使得训练集在特征空间中线性可分,也很难断定,这个貌似线性可分的结果不是由于过拟合所造成的。
因此,为了解决该问题,对应于前面所谈到的硬划分(硬间隔),这里引出了一个软间隔的概念,如下图所示:


这里写图片描述
这里,会引入损失函数,松弛变量,和正则变量这些概念,具体在西瓜书P129页,周志华老师有具体谈到。

同样,SVM不仅可以用来做分类问题,还可以做回归问题。这被称为支持向量回归,而且考虑到,线性回归的“粒度”问题。支持向量回归引入了不敏感损失函数,使得回归线会有一个“间隔带”,如图所示:


这里写图片描述
小结
至此,SVM的基本流程和思想全部讲解完毕。
实际上,SVM的思想很简单,但它的精妙之处是在于它的数学推理和运算。
从大方向来说,在整个SVM中有两个精妙的数学技巧,即被约束的(凸)二次最优化和核函数。

要想透彻的理解SVM,还是应该从数学的角度去分析它,这样才能体会到它带来的数学之美,毕竟SVM是由统计学家搞出来的=。=
回顾,支持向量机的发展历史我们可以知道,SVM由于在文本分类任务中显示出了卓越的性能,使它很快成为机器学习的主流技术。但由于SVM的的求解计算非常复杂,因此通常是借助于凸优化技术。如何提高效率,使得SVM能够适用于大规模数据一直是研究重点(其中核函数是重中之重,前面也提到,核函数的选择并没有一个确定的方案,目前主流的做法是采用多个核函数进行组合,来避免出现巨大的选择误差,这实际上是涉及到集成学习)。
SVM本身是针对二分类问题设计的,因此对于多分类任务还需要进行专门的推广。

参考文章
支持向量机(SVM)是什么意思?–简之的回答
数据挖掘(概念与技术)-第三版-Jiawei Han
机器学习-周志华
SVM史诗级干货,吐血推荐!
支持向量机原理篇之手撕线性SVM
深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

原创粉丝点击