SVM是什么
SVM(全称Support Vector Machine)中文名称支持向量机。SVM是一种二分类算法,所谓二分类即把具有多个特性(属性)的数据分为两类。它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。
线性分类
如果需要分类的数据都是线性可分的,那么只需要一根直线f(x)=wx+b就可以分开了,如下图所示,现在有一个二维平面,平面上有两种不同的数据,分别用圈和叉表示。由于这些数据是线性可分的,所以可以用一条直线将这两类数据分开,这条直线就相当于一个超平面。
然而,通过L1或L2,我们都可以将上面的样本呢点分为两类,这两条线称为分类器。那么,这两个分类器哪个更好呢?
可能看起来差别不大,都可以完美地分开所有的数据,但我们在上面样本点地基础山再加入两个样本点,如图:
可以发现这次两个分类器地分类结果完全不同。根据数学定义,距离越近表示越相似,这也就意味着上方的X样本点属于B类,而下方的X样本点属于A类,显然第一个分类器L1的判断是正确的。
现在我们采用以分类器L1,如图:
则,样本点到线L1的距离越远,则样本点属于某一类的可能性越大。如图中所示,样本点d属于B类的可信度大于样本点c属于B类的可信度。
而SVM就是找到让所有的样本点分类可信度最高的那条线。
最大间隔分类器
对一个数据点进行分类,当超平面离数据点的“间隔”越大,分类的确信度(confidence)也越大。所以,为了使得分类的确信度尽量高,需要让所选择的超平面能够最大化这个“间隔”值。这个间隔就是下图中的Gap的一半。
而图中的两条虚线所占据的点被称为支持向量点,在测试训练数据的过程中,SVM只需计算支持支持向量点,便可以得出结果,因此计算量大大减少。
核函数处理非线性数据
事实上,大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在。那对于非线性的数据SVM怎么处理呢?对于非线性的情况,SVM 的处理方法是选择一个核函数 κ(⋅,⋅) ,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。
具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。如图所示,一堆数据在二维空间无法划分,从而映射到三维空间里划分:
但是,如果凡是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的,而且内积方式复杂度太大。此时,核函数就隆重登场了,核函数的价值在于它虽然也是讲特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。
几种常用核函数:
-
h度多项式核函数(Polynomial Kernel of Degree h)
-
高斯径向基和函数(Gaussian radial basis function Kernel)
-
S型核函数(Sigmoid function Kernel)
通过松弛变量处理 outliers
在文章一开始我们就假定,数据是线性可分的。后来为了处理非线性数据,也通过核函数对原来的线性 SVM 进行了推广,使得非线性的的情况也能处理。虽然通过映射将原始数据映射到高维空间之后,能够线性分隔的概率大大增加,但是对于某些情况还是很难处理。
例如可能并不是因为数据本身是非线性结构的,而只是因为数据有噪音。对于这种偏离正常位置很远的数据点,我们称之为 outlier ,在我们原来的 SVM 模型里,outlier 的存在有可能造成很大的影响,因为超平面本身就是只有少数几个 support vector 组成的,如果这些 support vector 里又存在 outlier 的话,其影响就很大了。例如下图:
而SVM 允许数据点在一定程度上偏离一下超平面,这样一来也就可以消除这个outlier的影响。
SVM特征
在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别、分类(异常值检测)以及回归分析。
其具有以下特征:
(1)SVM可以表示为凸优化问题,因此可以利用已知的有效算法发现目标函数的全局最小值。而其他分类方法都采用一种基于贪心学习的策略来搜索假设空间,这种方法一般只能获得局部最优解。
(2) SVM通过最大化决策边界的边缘来实现控制模型的能力。尽管如此,用户必须提供其他参数,如使用核函数类型和引入松弛变量等。
(3)SVM一般只能用在二类问题,对于多类问题效果不好。