LIBSVM新手指导——《A Practical Guide to Support Vector Classification》翻译

SVM(支持向量机)分类实用指导


Chih-Wei Hsu, Chih-Chung Chang, and Chih-Jen Lin
计算机科学系,国立台湾大学,台北 106,台湾

http://www.csie.ntu.edu.tw/~cjlin
原始版本:2003          最近更新:5.19.2016

摘要

        支持向量机SVM目前已经成为最流行的分类技术之一,然而,对于那些不熟悉SVM的初学者来说,由于漏掉了一些简单但又重要的步骤,所以得到的结果往往很难达到预期的结果。在这个指导书中,我们将介绍一个通常可以帮助SVM使用者得到满意结果的简单处理流程。

1  简介

        SVM(支持向量机)作为一种有效的数据分类技术,尽管被认为比神经网络简单,但是对于那些不熟悉SVM的使用者们通常在开始不能得到满意的结果。这里我们介绍了一个“傻瓜教程”,通常可以得到满意的结果。
        但必须要注意的是这个指导并不面向SVM研究者,我们也不能保证一定能实现很高的准确率。另外,我们并没有打算去解决那些具有挑战性的难题,我们的目的只是提供SVM新手们一些诀窍以快速得到可接受的结果。
        尽管使用者们不必去了解SVM的原理知识,但为了解释我们的处理流程,我们还是简要的介绍一些关于SVM的基础知识。一个分类任务通常涉及到将数据划分为训练集和测试集。每个在训练集的样本都包含一个“目标值”(即类别标签)和一些“属性”(即特征或观测变量) (SVM是有监督学习),SVM的目标就是基于训练数据建立一个可以仅通过给定测试数据的属性来预测其目标值的模型。
        训练集中每个样本采用实例-标签对 , 来表示,其中 。SVM的训练过程就是解决下面这个优化问题:
        训练数据 通过函数 被映射到一个更高维(或许是无限维)的空间,然后SVM在这个高维空间中找到具有最大间隔的划分超平面。 称为错误项的惩罚系数,此外, 称为核函数。尽管不断有新的核函数被研究者提出,不过初学者应该可以在关于SVM的书籍 (推荐周志华所著清华大学出版社出版的《机器学习》)中找到以下四种基本的核函数:

  • 线性核:
  • 多项式核:
  • RBF(径向基)核(高斯核):.
  • Sigmoid核:.

        其中 都是核参数。

1.1  真实世界的例子

        如表1所示是一些真实世界的例子,这些数据集由一些在一开始不能获得满意准确率的使用者提供,通过使用在本指导中阐述的处理流程后,我们帮助他们实现了更优秀的性能,具体的细节请查看附录A。
        这些数据集可以在http://www.csie.ntu.edu.tw/~cjlin/papers/guide/data/下载。


1.2  建议处理流程

        许多初学者通常使用以下处理流程:
  1. 将数据转换成SVM包指定的格式
  2. 随机选择一些核和参数进行训练
  3. 测试

        我们建议初学者先尝试以下处理流程:

  1. 将数据转换成SVM包指定的格式
  2. 对数据进行简单缩放处理
  3. 考虑使用RBF核
  4. 使用交叉验证找到最佳的参数
  5. 使用最佳参数来训练整个数据集(最佳参数可能会受数据集大小的的影响,但是在实践中发现在交叉验证中获得的参数已经可以很好地拟合整个训练集)
  6. 测试

        我们在接下来的章节中将详细阐述这些流程的细节。


2  数据预处理

2.1  名义型特征

        SVM要求每个数据样本都能用实数向量来表示,因此,如果存在名义型属性,我们必须要先将它们转换成数字类型。我们推荐使用长度为m的元组来表示m-类的属性,其中只有一个数字为1,其余皆为0。例如一个3-类的属性比如{红、绿、蓝}可以替代为(0,0,1)、(0,1,0)、(1,0,0)。我们的经验告诉我们如果一个属性的元组长度越长,那么这种编码方法可能比使用单一的数字更加稳定。

2.2  数据缩放

        在使用SVM训练模型前对数据进行缩放操作是十分有必要的,Sarle关于神经网络的FAQ(1997)的第二部分就对缩放和运用SVM时需要的考虑的地方的重要性进行了解释。缩放的主要好处就是防止各属性的值域差别过大,一些属性的值域的跨度大,而另外的跨度则较小。另一个好处就是可以避免数值计算困难,因为核函数的值通常取决于特征向量的内积,例如线性核核多项式核,大属性值可能会造成计算困难。我们建议通过线性缩放将每个属性缩放到[-1,+1]或[0,1]区间。

        当然,我们需要对训练集和测试集使用同样的处理方法,例如,假设我们将训练数据的某个属性的值域从[-10,+10]缩放到[-1,+1],如果这个属性在测试集中的值域是在[-11,+8]之间,那么我们必须将测试数据缩放到[-1.1,+0.8]。附录B会给出一些实际的例子。


3  模型选择

        尽管在第一节中只谈到了4种常用的核函数,但我们还是要先决定选择使用那个核,然后再选择惩罚系数和核参数。

3.1  RBF核

        在选择核函数时通常RBF核是作为第一选择,这个核函数将样本非线性的映射到了一个更高维的空间,所以,不同于线性核,RBF核可以处理类标签和属性非线性相关的情况。此外,Keerthi and Lin (2003)提出线性核其实是RBF核的一种特殊情况,因为具有惩罚系数的线性核和具有参数(,)的RBF核有相同的性能。另外,sigmois核在特定的参数下也会表现得与RBF核类似(Lin and Lin, 2003)。

        第二个原因就是超参数的个数会影响模型选择的复杂度,而多项式核具有比RBF核更多的超参数。

        最后,RBF核具有更少的数值计算困难。关键的一点就是RBF核的值域固定在,相比之下多项式核的值在次数非常大的时候可能会取到无穷或者零。另外,我们必须要注意sigmoid核在一些参数下是无效的(即不是两个向量的内积)(Vapnik, 1995)。

        这里还有一些RBF核不合适使用的情况,特别是当特征的数量特别大时,这时可能更好使用线性核。我们将在附录C进行详细讨论。

3.2  交叉验证和梯度搜索

        在RBF核和中主要有两个参数:,我们先前并不知道对于给定的问题最佳的取值是多少,所以我们有必要进行模型选择(参数搜索)。我们的目标是找到一对足够好的(,)使得分类器可以准确的预测未知的数据(即测试集),请注意我们不必要去追求很高的训练准确率(即训练器可以准确预测那些标签已知的训练数据)。综上所述,一个常用的策略就是将数据集分成两部分,其中一个被认为是未知的(另一个被认为已知的用来训练模型),从这个“未知”的数据集中获得的预测精度可以准确的反应分类器在分类一个独立的数据集的性能,此过程的改进版本就被成为交叉验证。

         对于v-折交叉验证,我们首先将训练集分割成v个大小相同的子数据集,接下来用其中v-1个子数据集训练的分类器来测试剩下的那个子数据集。因此,训练集中的每个样本都被预测过一次,交叉验证的精度就等于正确分类的样本所占训练集样本总数的百分比。

        交叉验证还可以防止过拟合问题,如图1所示通过一个二分类问题来阐述这个问题,其中实心圆圈和三角形是训练数据,而空心圆和三角形是测试数据。在图1a和1b中由于过拟合,分类器测试的准确度并不理想,如果我们把在图1a和1b中的训练和测试数据看成是交叉验证中的训练集和验证集,结果还是不太好,另一方面,图1c和1d所示的分类器没有过拟合并且在获得更好的交叉验证结果的同时测试精度也提高了。


        我们推荐利用交叉验证的方法通过梯度搜索来确定,通过对(,)不同的组合进行测试并选择其中具有最大交叉验证精度的组合,我们发现对使用指数增长是一个实用的方法来找到满意的参数(例如,)。

        梯度搜索是一种简单直接但是似乎稍显天真的方法,事实上,这里还有一些更加先进,可以节省更多计算开销的方法,例如,估计交叉验证率。然而,这里有两个原因来说明我们为什么还是更喜欢这个简单的梯度搜索方法。

        第一,从心理上,我们使用那些通过近似或启发式来避免进行全局搜索的方法可能会觉得不靠谱。另一个原因是通过梯度搜索来寻找满意参数所需的计算时间并不会比那些先进的方法更多,因为这里只有两个参数需要确定。另外,梯度搜索可以很容易实现并行化,因为每次交叉验证都是独立的,而很多先进的算法,比如,walking along a path是一个迭代的过程,很难实现并行化。

        不过完成一个完整梯度搜索仍然是十分耗时的,我们建议在开始的时候使用粗略的梯度,在找到一个最佳的梯度区间后,再在该区间进行精细的梯度搜索。为了说明这个过程,我们通过german问题来做一个实验,在进行缩放后,我们一开始使用一个粗略的梯度(如图2所示)找到最佳的(,)取值是——拥有77.5%的交叉验证精度。接下来我们在附近进行精细的提度搜索(如图3所示)并且在获得了最佳的交叉验证精度77.6%。再找到了最佳的(,)对后,重新训练整个训练集得到最终的分类器模型。



        以上的方法在上千或者更多的数据大小时工作效果良好,而对于超大型数据集来说,一个可行的方法是随机选择数据集的一个子集,在该子集上进行粗略的梯度搜索,再在整个数据集上进行精细的梯度搜索。


4  讨论

        以上提到的方法可能在一些情况下表现不会足够好,所以其他一些技术,例如,特征选择还是需要的,不够这些内容已经超越本指导的范畴了。我们的实验证实了这些处理方法对于那些没有很多特征的数据效果显著。当需要处理成千上万的属性时,在将数据传递给SVM之前或许需要先对它们进行挑选。

 

致谢

        我们感谢所有使用我们的软件LIBSVM和BSVM,帮助我们认清初学者可能遇到的困难的用户,还有那些对本文进行校对的用户(特别是Robert Campbell)。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值