支持向量机(SVM) |  基本概念篇

支持向量机(SVM) | 基本概念篇

导 语

支持向量机(support vector machine,SVM)是目前最好的有监督学习算法之一。但是由于理解SVM需要一些的矩阵知识,对一般读者来讲有一定的难度。所以很多人的做法是在网上下载libsvm库(台湾 林智仁教授封装的SVM库),不管三七二十一直接使用。但是这样做明显是囫囵吞枣的短视行为,由于对SVM原理不甚了解,所以看懂代码的难度很大,更别提真正用SVM解决实际问题了。

因此,本系列讲义在斯坦福机器学习课程的基础上,对SVM的概念、原理进行介绍,并用python代码进行实现,兼顾通俗易懂与原理清晰,力争使SVM不再看似高深,真正为我们所用。


1 线性可分与超平面方程

支持向量机(SVM)本身是用来分类的,是一个二类分类器,多分类问题则需要对其进行一定修改,我们从最初的二分类说起。

假设在一个二维平面内存在一些数据点,它们分别属于不同的两类(A和B),我们试图将两类点分开。如果在这个平面内能够画一条直线,将这两类点分开,则这些数据点被称为“线性可分”,如图1所示。如果找不到分隔直线,就是“非线性可分”。

图1 线性可分示意图

我们先来看“线性可分”这种情况:

首先,二维平面的这条一维分隔直线被称为“超平面”(hyper plane)。接着想,如果上面的待分类数据点在三维空间呢?此时的分隔超平面显然就是一个平面。再进一步,如果数据点是100维呢?它的超平面就是99维的。即 n 维数据,它的超平面是 n-1 维的,分布在超平面一侧的属于同一个类别。用数学语言组织一下,即:

x 表示特征空间的数据点(即特征向量), y 表示类别,可以取1或者-1分别代表两类,我们要求得一个超平面,对特征空间中的点进行分类。这个超平面的方程可以表示为:

\omega^{T}x+b=0 , 其中 \omegab 都是参数变量。

注释1:关于y的取值,当然你也可以取0和100来代表两种不同类别。这里取±1是为了计算方便,一类是正,一类是负。对于任意一个数据点,只需计算 f(x)=\omega^{T}x+b ,当 f(x)>0 时,将 x 归类于 y=1 的类别。当 f(x)<0 时,将 x 归类于y=-1的类别,而中间的超平面是f(x)=\omega^{T}x+b=0,如图2所示。
图2 超平面示意图


2 函数间隔与几何间隔

接下来,我们如何确定这个超平面呢?即求解合适的\omegab,让超平面很好的分隔数据点。

直观上说,当两边的数据点距离这个超平面的间隔越大,分类效果越好。我们希望所有点都远离这个超平面,但对于数据点来说,有距离超平面近的,有距离超平面远的。我们更希望,靠近中间超平面的点尽可能的远离超平面,哪怕这会让已经距离很远的点稍微靠近了点超平面。(这段话比较绕,多理解几遍。这就是SVM着眼于局部最优而非全局最优)


衡量点到面的远近,是距离。因此,我们需要引出函数间隔(Functional margin)和几何间隔(Geometrical margin)。

前面我们将分类标签设为1和-1,如果这个平面对数据分类正确,则对任何数据点 x_{i} 来说,都有 y_{i}\cdot f(x_{i})=y_{i}\cdot (\omega^{T}x_{i}+b)>0 ,即 y_{i}\omega^{T}x_{i}+b的符号是一致的,要么都是正,要么都是负。定义第 i 个数据点的函数间隔( \tilde{\gamma_{i}} )为:

\tilde{\gamma_{i}}=y_{i}\cdot f(x_{i})=y_{i}\cdot f(x_{i})=y_{i}\cdot (\omega^{T}x_{i}+b) \quad i=1,2,...,n

对于整个数据集来说,其函数间隔是所有数据点的函数间隔的最小值:

\tilde{\gamma}=min \tilde{\gamma_{i}}\quad i=1,2,...,n\\但是,光有这个函数间隔并不能完全满足我们衡量数据点距离远近的要求。试想,如果求出\omegab,确定这个超平面后,成比例扩大\omegab,比如都扩大2倍,即 \omega^{'}=2\omegab^{'}=2b,此时,超平面没有变,函数距离却扩大为原来的2倍,而且多出一组\omegab。所以,我们接着引出几何间隔的概念。

图3 几何距离示意图

如图3所示,对于任意点 x_{i} ,假设其在超平面内的投影点为 x^{'}x_{i}到超平面的距离为 \gamma_{i}\omega 为超平面的垂直向量, \frac{\omega}{\left|\left| \omega \right|\right|} 为单位向量,根据向量的加法,可知x^{'}=x_{i}-\gamma_{i}\frac{\omega}{\left|\left| \omega \right|\right|},代入超平面方程 \omega^{T}x+b=0 ,计算得到:

\gamma_{i}=\frac{\omega^{T}x_{i}+b}{\left|\left| \omega \right|\right|}\\

为保证\gamma_{i}是非负的,让 y_{i}\gamma_{i}相乘,得到几何间隔( \bar{\gamma_{i}} ):

\bar{\gamma_{i}}=y_{i}\cdot\gamma_{i}=y_{i}\frac{\omega^{T}x_{i}+b}{\left|\left| \omega \right|\right|}\\

对比几何间隔和函数间隔,可以发现:

\bar{\gamma_{i}}=\frac{\tilde{\gamma_{i}}}{\left|\left| \omega \right|\right|}\\

此时,等比例缩放\omegab,相应的 \left|\left| \omega \right|\right| 也跟着变化,几何间隔\bar{\gamma_{i}}的值不会改变。因此更适合作为衡量距离的依据。同样,定义数据集上的全局几何间隔:

\bar{\gamma}=min \bar{\gamma_{i}}\quad i=1,2,...,n\\


3 最大间隔与支持向量的概念

回顾一下我们的目标,寻找\omegab的值,确定一个超平面,从而使靠近这个平面的最近的点,有最大的间隔。这是一个优化问题,即目标函数为: max \bar{\gamma} ,约束条件为 \bar{\gamma_{i}}>\bar{\gamma} 。根据几何距离与函数距离的关系,进行一下变换,目标函数及约束条件可以表示为:

max\quad\frac{\tilde{\gamma}}{\left|\left| \omega \right|\right|}\\s.t. \quad y_{i}\cdot (\omega^{T}x_{i}+b)\geq\tilde{\gamma} \quad i=1,2,...,n\\ 为简化推导,令 \tilde{\gamma}=1 ,则目标函数转换为:

max\quad\frac{1}{\left|\left| \omega \right|\right|}\\

s.t. \quad y_{i}\cdot (\omega^{T}x_{i}+b)\geq1 \quad i=1,2,...,n\\ 此时,几何距离\bar{\gamma}=\frac{1}{\left|\left| \omega \right|\right|}

注释2:至于为啥要让\tilde{\gamma}=1,就是为了简化推导过程。因为函数距离\tilde{\gamma}是一个正数,约束不等式两边都除以\tilde{\gamma},令 \omega^{'}=\frac{\omega}{\tilde{\gamma}}b^{'}=\frac{b}{\tilde{\gamma}} 则不等式变为 y_{i}\cdot(\omega^{'}x_{i}+b^{'})\geq1 。目标函数分子和分母也都除以\tilde{\gamma},则目标函数变为 max \frac{1}{\left|\left| \omega^{'} \right|\right|}。这对求解的超平面结果不影响。
图4 支持向量示意图

如图4所示,假设我们求解得出了最优超平面,即中间的实线。其到两条虚线的距离相等,均为几何距离\bar{\gamma}=\frac{1}{\left|\left| \omega \right|\right|},代入几何距离的公式,可知这两条虚线上的点满足y(\omega^{T}+b)=1,这些点称之为“支持向量”。而不是支持向量的点,则有y(\omega^{T}+b)>1

之所以称之为“机",是因此超平面会产生一个二值结果,即是一种决策“机”。

以上就是支持向量机(SVM)的基本概念,可以通过它们了解支持向量机(SVM)的概况。下一步就是介绍具体的求解、优化方法了。



编辑于 2018-12-14 19:13