R语言中SVM实现程序比较

时间:2022-07-10 01:00:32

R语言中SVM实现程序比较

摘要:作为目前最流行、最有效的分类和回归方法,支持向量机(英语:Support Vector Machine,常简称为SVM)几乎存在于任何流行的编程语言中。目前在R语言中,有4个软件包可以实现SVM。文本的目的就是介绍和比较这4个软件包。

关键词:支持向量机;R语言

引言

支持向量机理论是基于统计学习理论的简单想法。它的简单性体现在:它作用于输入空间相关的高维非线性特征空间中的数据,对其应用一个简单的线性方法;与此同时,即便我们认为支持向量机是高维空间中的一个线性算法,但事实上,它不涉及任何在高维空间中的运算,这种在许多机器学习问题(分类,回归,和异常检测)中充满艺术性的简单实现形式有助于它自身的推广。本文提醒如下:首先,我们简单介绍支持向量机;紧接着介绍R语言和其它编程语言中,可用的支持向量机实现软件的概述;然后介绍所用的数据集;最后本文提供了R语言中4个软件包运行支持向量机程序耗费时间的测试结果并总结分析4个包的区别。

支持向量机简介

支持向量机(SVM)是一种线性和非线性数据的分类方法,它使用非线性映射将原始数据映射到高维空间中,在该空间内搜索最佳分离超平面。在线性可分的情况下,存在这样的超平面把空间中的类分开,并且该超平面与类的距离最大,该超平面即最大边缘超平面,它等价于求解约束的凸二次最优化问题(在此不详述,详见参考文献),此时是在原输入空间(n维)内寻找最大边缘超平面;在线性不可分的情况下,可以允许个别样本分类错误,但需要借助非线性映射把原输入数据变换到高维空间,在该空间搜索最大边缘超平面(此时是线性的,可用二次最优化求解),将该超平面对应到原输入空间的非线性超平面。然而这个过程中的点积计算量极大,幸而二次最优化求解中含有训练元组的点积等价于核函数作用于原输入数据,这些核函数在原输入空间上产生非线性分类器,利用核函数不仅可以省略变换后数据元组上的点积计算,也避免了这种映射,此时仍在原输入空间计算,因此与非线性映射后的维度相比降低了不少。

软边缘(Soft Margin):即线性不可分情况下,允许个别样本跑到其它类别之中。但要使用参数来权衡两端,一个是要保持最大边缘的分离,另一个要使这种破例不能太离谱。这种参数就是对错误分类的惩罚程度C。

分离超平面(separating hyperplane):即将类进行分离的超平面,这样的超平面很多,而从超平面到其边缘的两侧距离最短且相等的超平面即为最大边缘超平面(Maximal Margin Hyperplane,MMH),它具有更高的泛化准确率,此时MMH到类的最近的训练元组即为支持向量(support vector)。

支持向量是最难分类(临界)的训练元组,给出了最多的分类信息,它定义了间隔及最大边缘超平面。因此,学习后的分类器的复杂度由支持向量数而不是数据维度刻画,SVM也不太容易过分拟合。过拟合的原因与不稳定性密切相关,改动一个或两个训练元组会引起大范围的决策边界的变化,但决策最大边缘超平面则相对比较稳定,只有当被增加或去除的训练元组是支持向量时,边缘才会变动。过度拟合的起因是边缘过分拟合。而支持向量通常只是训练元组中的极小部分,几乎不会发生过分拟合。

即使数据维度很高,具有少量支持向量的SVM可以具有很好的泛化性能。利用支持向量数可计算SVM分类器的期望误差率的上界,同样独立于数据维度。

支持向量机回归(SVR):是由SVM发展出来的回归方法,同样也有线性可分与不可分情况。与SVM的区别在于,目标是使预测误差最小化同时函数平面度最大化。这种权衡是通过设置参数C来控制。参数ε是在回归函数周围定义的一个管道,管道内的误差将被忽略。如果所有的训练元组都在宽度为2ε的管道内,算法输出一个位于最平的管道中央的函数,这个管道包含所有训练元组,这种情况下总误差为0。因此,ε控制了函数与训练元组的拟合程度。支持向量即在管道外或管道边缘的训练元组。

软件介绍

支持向量机目前在广泛的领域得到应用,从生物信息学到天体物理学。现在大部分支持向量机软件使用C或C++编写。例如著名的libsvm,提供了一个强大快速的支持向量机实现方法,在许多分类和回归问题的解决上产生了具有艺术性的结果。SVMlight,SVMTorch,Royal Hol-loway Support Vector Machines,mySVM,and M-SVM等许多软件包提供了MATLAB的接口,也有一些MATLAB的本地的SVM工具包,例如支持向量机和核函数方法MATLAB工具包(SVM and Kernel Methods Matlab Toolbox)或 the MATLAB Support Vector Machine Toolbox and the SVM toolbox for Matlab。

R软件概述

R是用于统计分析、绘图的语言和操作环境。R是一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R是一套完整的数据处理、计算和制图软件系统。与其说R是一种统计软件,还不如说R是一种数学计算的环境,因为R并不是仅仅提供若干统计程序、使用者只需指定数据库和若干参数便可进行一个统计分析。R的思想是:它可以提供一些集成的统计工具,但更大量的是它提供各种数学计算、统计计算的函数,从而使使用者能灵活机动的进行数据分析,甚至创造出符合需要的新的统计计算方法。

R与SPSS、SAS相比较,拥有非常突出的优势:

1、产品线齐全。在功能与产品线齐全上已经远远超出SPSS,而与SAS不相上下。有些R的包功能上甚至已经远远超出商业软件。

2、免费。请注意,很多高级功能模块均需要在SPSS、SAS的基础模块基础之上另行购买,费用往往在千元美元以上,而R的一切功能均是免费。

3、开放。由于R本身是一个统计语言环境,再新的统计模型也很快能实现,所以在很多最新的统计功能上,没有现成的统计软件包,使用R则完全可以自己编写算法。同样,由于R是完全开源,我们可以很快地基于研究者已经开发出的算法编写更适合自己情况的算法。

自然,SVM在R中也可以很好的实现。

第一个被引入R中的SVM实现程序是e1071包,e1071包中的svm函数提供了一个libsvm接口,包含可视化方法及参数遍历方法。

Kernlab包提供了多种以核函数为基础的方法,和一个基于libsvm和bsvm优化的SVM方法,它的目的是提供一个灵活的支持向量机实现方法。

KlaR包包含SVMlight的接口,SVMlight是一个流行的支持向量机实现工具,另外提供了诸如正规化判别分析等分类工具。

最后,svmpath包提供了一个适合支持向量机解决方案的完整算法。

本文接下来主要比较R中这四个支持向量机实现方法。

数据

本文我们将使用如下数据集。

Spam(垃圾邮件),这是Hewlett-Packard实验室采集的数据集,这个数据集用于对4601封电子邮件进行分类,判断其是否为垃圾邮件。除了标明是否为垃圾邮件的类别标签外,还有另外57个变量用来指示某些单词和字符出现的频率,这个数据集由kernlab包提供。

Musk(麝香),这个数据集由kernlab包提供,描述了476个分子集合。其中207个分子被人类专家判定为麝香,剩余的269个分子被判定为不是麝香,这个数据集包含167个变量,用来描述分子的几何结构。

BreastCancer(乳腺癌),本数据由mlbench包提供。是一个包含699个观测数据,11个变量的数据框格式数据集,其中包含一个字符型变量,9个有序或者名义变量,一个目标类别。目的是确定每个观测属于良性肿瘤还是恶性肿瘤。

接下来,我们从训练时间的角度比较这4个SVM实现程序,在这个比较中,我们只专注于支持向量机的实际训练时间,并不包括估计训练误差或者估计交叉验证误差;计算包含二分类和多分类问题以及一些回归问题;训练使用高斯核函数,其中参数使用kernlab中的sigest函数估计得出;为了减少误差,我们取10次运算的均值。这些运算是在0.6-2版本的kernlab,1.5-11版本的e1071,0.9版本的svmpath,和0.4-1版本的klaR下进行。

ksvm()

(kernlab)svm()

(e1071)svmlight()

(klaR)svmpath()

(svmpath)

spam18.517.934.834

musk1.41.34.6513.8

BreastCancer0.470.361.3211.55

在不同数据集上,支持向量机的训练时间如上表,单位为秒。训练在Linux系统下运行。

结论

下表提供了四种支持向量机实现方法的快速概述。

ksvm()

(kernlab)svm()

(e1071)svmlight()

(klaR)svmpath()

(svmpath)

方法C-SVM分类算法,v-SVM分类算法,C分类器的有界约束的版本,一分类SVM,ε-SVM回归算法,v-SVM回归算法,带边界的ε-SVM回归算法,一对一(one-against-one)多分类方法,原生多类分类方法C-SVM分类算法,v-SVM分类算法,一分类SVM,ε-SVM回归算法,v-SVM回归算法C-SVM分类算法,ε-SVM回归算法C分类器的有界约束的版本

核函数高斯核函数,n次多项式核函数,线性核函数,反曲核函数,拉普拉斯核函数,贝塞尔核函数,方差分析核函数,样条插值核函数高斯核函数,n次多项式核函数,线性核函数,反曲核函数高斯核函数,n次多项式核函数,线性核函数,反曲核函数高斯核函数,n次多项式核函数

优化算法SMO算法,TRON算法SMO算法分块算法无

模型选择高斯核参数参数估计网格搜索算法无无

数据类型公式,矩阵公式,矩阵,稀疏矩阵公式,矩阵矩阵

扩展性自定义核函数无无自定义核函数

附加功能作图功能作图功能,准确性估计无作图功能

许可GNU通用公共许可证GNU通用公共许可证非商业用途GNU通用公共许可证

Kernlab包中ksvm函数提供一种灵活的SVM实现方法,它包含了绝大多数SVM方法和核函数,并且允许使用者自定义核函数;它提供了很多有用的选项和特征,诸如绘图方法,类别概率输出,交叉验证误差估计,高斯核函数的自动参数估计,但是缺少模型选择工具。e1071包中的svm函数提供了一个libsvm包的稳健接口。并且包含一个模型选择工具,tune函数,和稀疏矩阵接口以及一个绘图方法和精度估计特征和类别概率输出。但是没有给使用者自定义核函数的灵活性。klaR包中的Svmlight函数提供了一个SVMlight的非常基础的接口,有很多缺点;它没有充分利用SVMlight的全部潜力而且似乎很慢;而且SVMlight的许可也有很多限制,只允许非商业用途使用。Svmpath没有提供很多功能,但是可以作为一个探索性工具,特别是用于确定正规性参数λ=1/C的合理值。

现有的实现方法提供了广泛的方法和选项,但是这个实现方法应该随着正在进行的SVM研究而扩展。一个有用的扩展是对观测数据加权,这个方法还没有被任何实现方法所支持。其它的扩展包括在线性核函数的情况下,原始预测系数的返回;以及文本挖掘应用中,对诸如字符串树类型的结构化数据直接计算的接口及核函数。(作者单位:青岛太阳软件有限公司)

参考文献:

[1]张学工译.统计学习理论的本质.北京:清华大学出版社,2000,63-65

[2]邓乃杨,田英杰.支持向量机理论、算法与拓展[M].北京科学出版社,2009.

[3]vapnik V N.统计学习理论[M].北京:电子工业出版社,2004.

[4]Vapnik V N,Vapnik V N.An overview of statistical learning theoryAn overview of statistical learning theory[J].Neural Networks,IEEE Transactions on.1999,10(5):988-999.

上一篇:浅谈普通高校学生篮球意识的培养与训练 下一篇:认同·拯救·融合