码迷,mamicode.com
首页 > 系统相关 > 详细

支持向量机(support vector machine)

时间:2016-05-12 12:45:35      阅读:355      评论:0      收藏:0      [点我收藏+]

标签:

支持向量机SVM


支持向量机(support vector machine,SVM)是由Cortes和Vapnik在1995年提出的,由于其在文本分类和高维数据中强大的性能,很快就成为机器学习的主流技术,并直接掀起了“统计学习”在2000年前后的高潮,是迄今为止使用的最广的学习算法。
本篇将要简要的介绍一下SVM,如有错误请批评指正,共同学习。本文主要分为以下几个部分:
  • SVM的优化目标(代价函数)
  • SVM最大间隔超平面 large margin(决策边界)
  • SVM最大间隔中的数学原理(mathematics behind large margin classification)
  • 核函数 kernels
  • 实践中使用SVM
一、SVM的代价函数(cost function)
先来看下SVM的代价函数,即SVM的优化目标。SVM的代价函数和logistic regression有几分相似。SVM的代价函数为:

技术分享

其中技术分享为参数,即正则化系数。其中函数技术分享和函数技术分享的图像如下图所示:

技术分享

从上图中可以看出,要想最小化代价函数,则:
当一个正样本y=1时,我们希望技术分享
当一个负样本y=0时,我们希望技术分享

二、SVM最大间隔超平面 large margin(决策边界)

在给定的样本空间中,SVM主要通过划分超平面(决策边界)来实现样本分类,但是存在多个能划分训练样本的超平面(决策边界)如下图所示:

技术分享
那么SVM会选择哪一个超平面呢?SVM会选择具有最大间隔(margin)的超平面即上图中红色的超平面,因为它和样本之间具有最大的margin,因此意味着这个超平面具有最强的泛化能力(鲁棒性)。
SVM的目的就是为了最大的margin,那么该如何找到这个margin呢?超平面(决策边界)可以用方程来表示:技术分享.其中技术分享是超平面的法向量,技术分享是位移项。在上一节SVM代价函数部分讲到了为了使超平面能够正确分类,需要有如下的约束条件:

技术分享

所谓支持向量就是距离超平面最近的样本点并且使上式等号成立(在下图中用红色标出)。而两个异类的支持向量到超平面的距离之和即为间隔(margin):

技术分享
因此,从上图中能够得到间隔(margin)为:
技术分享
而SVM的任务则是找到间隔最大的超平面,并且要满足技术分享的约束条件,即:
技术分享

为了计算的方便,可以把上式改写为:
技术分享

我们来看看代价函数中参数C对超平面的影响,如下图所示(图片来源:NG machine learning课):


技术分享

当我们把C设置成不太大的时候会产生上图中黑色的超平面,而当我们把C设置的过大时,则是上图中粉色的超平面,显然粉色的超平面有点倾向过拟合了,其泛化能力显然很差。因此参数C的选择要折中考虑margin和过拟合。

三、SVM最大间隔中的数学原理(mathematics behind large margin classification)

在上一节其实已经介绍了如何通过数学求解最大间隔,在这一节中更加形象的用图解的方式介绍下具体数学原理。首先先来介绍一下向量内积,这个大家都知道,这里就简单的说下。假设有两个二维向量技术分享,其内积技术分享,当然其内积也可以通过几何这样计算:技术分享,其中P是有符号的,如下图中左图p是正的,右图则为负的。

技术分享


因此,对于SVM代价函数中的优化目标:技术分享,则技术分享,技术分享表示范数。如下图所示:


技术分享



因为技术分享技术分享技术分享技术分享上的投影,因此技术分享的约束条件可以表示为:

技术分享

下面我们通过图来看看为何SVM会选择具有最大间隔的超平面(决策边界),先来看下图中的决策边界(技术分享是超平面的法向量,因此与超平面是垂直的):

技术分享

如上图中绿色的决策边界,可以看到样本点技术分享技术分享上的投影技术分享非常的小,这就意味着约束条件中技术分享技术分享会非常的大,这显然与我们的优化目标技术分享不符。

我们再来看一个比较好的决策边界:
技术分享

这个图中绿色的决策边界,可以看到样本点技术分享技术分享上的投影技术分享是最大的,因此对于约束条件技术分享中的技术分享会相对较小,这正是我们希望看到的。
以上就从数学角度解释了SVM为什么会选择具有最大间隔的超平面。

四、核函数(kernels)
关于核函数最常用的核函数一般有线性核函数(linear kernels)和高斯核函数(Gaussian kernels),高斯核函数又叫径向基函数(Radical Basis Function,RBF) 。
假如给出一个如下图所示的非线性决策边界:

技术分享

我们可以构造一个如上图中所写的多项式特征变量,来区分正负样本。这种多项式还可以写成上图中的:技术分享,其中技术分享除了这种表达,还能不能有更好的其他选择去表示特征技术分享。这就要引入核函数(kernels),核函数是一种更好的表达。我们可以通过计算原始向量与landmark之间的相似度来表示特征技术分享,如下图所示:

技术分享

当然还可以用其他的函数来计算相似度,只不过这个例子中使用的高斯核函数。我们来看上图中计算技术分享的公式,其中:
技术分享
因此,我们能够发现:
  • 技术分享时,技术分享
  • 技术分享距离技术分享很远时,技术分享
因此给定一个样本技术分享上图中landmark(标记点)会定义出新的特征变量技术分享 
下面我们来看看根据计算出的特征技术分享怎样去分类样本。如下图所示:

技术分享

假设当技术分享时,我们预测样本类别为“1”,假设我们已经求得技术分享,那么对于图中给定的样本x,我们可以计算出技术分享,那么代入上式可得:技术分享,因此预测样本x的类别“1”。因此如果计算大量的样本,就能得出一个非线性的决策边界,如图所示:

技术分享


那么现在有一个问题就是,我们是怎样选择得到技术分享的,下面来介绍技术分享是如何得到的。
在刚开始,我们只需把训练集中的样本一一对应成技术分享即可,即给定技术分享,令技术分享如下图所示:
技术分享

因此,若给定一个训练样本技术分享,能够得到如下特征技术分享:
技术分享
其中技术分享
因此,带核函数的SVM(SVM with kernels)的代价函数变为:

技术分享
关于SVM的核函数(kernels)就介绍到这,下面来看看SVM中参数的选择问题(主要是参数技术分享技术分享该如何选择):

技术分享
五、实践中使用SVM

在实际使用SVM的时候,不建议大家自己实现SVM,因为SVM是一个特定的优化问题。目前已经有非常成熟并且高度优化的软件包,如国立台湾大学林智仁教授开发的liblinear(http://www.csie.ntu.edu.tw/~cjlin/liblinear/)和LibSVM(http://www.csie.ntu.edu.tw/~cjlin/libsvm/),非常出名。但是我们依然需要做的是以下两点:
技术分享

一般来说,当特征维度很高,而样本较少时选择线性核函数。当特征数量较少,样本数量较多时,选择高斯核函数。note:在使用高斯核函数之前要进行特征缩放(如果特征值之间差距过大)。
还有一些其他的核函数如下表所示:(实际上,只要一个对称函数所对应的核矩阵满足半正定的,就能作为核函数使用)

技术分享


最后,我们来比较下逻辑回归和SVM,看看何种情况下该使用逻辑回归,何种情况下使用SVM。详见下图(直接盗用NG的图)
技术分享
以上就是关于SVM的全部知识,大家共同学习。

支持向量机(support vector machine)

标签:

原文地址:http://blog.csdn.net/u012328159/article/details/51339801

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!