R语言实现支持向量机

支持向量机(Support Vector Machine,SVM)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。支持向量机方法是建立在统计学习理论的VC维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力。目前使用广泛的SVM实现工具是libsvm,其不仅集成在很多统计软件例如R,PYTHON等,还可以直接在Linux以及Windows下运行。

官网:https://www.csie.ntu.edu.tw/~cjlin/libsvm/

今天我们介绍一下在R语言中SVM的实现以及参数的优化。

1.首先安装SVM的R包e1071,同时安装数据的R包mlbench

2.载入R包,并载入相关的测试数据。

3.我们看下我们主要用到的几个函数以及相关的参数

a.svm()模型构建函数

此函数主要是构建SVM模型,其中主要的参数:

formaula设置所要训练的属性值以及结果例如Type ~ .:代表Type是结果并选取所有的属性值。

type可取的值有C-classification、nu-classification、one-classification、eps-regression和nu-regression这五种类型中。其中,前三种是针对于字符型结果变量的分类方式,其中第三种方式是逻辑判别,即判别结果输出所需判别的样本是否属于该类别;而后两种则是针对数值型结果变量的分类方式。

degree是仅用于多项式核函数中的参数,代表多项式核函数的次数,在本例中,经过实践发现degree为奇数时,degree越大模型表现越好,为偶数时,degree越大,模型越差,当degree足够大时,模型准确率趋于稳定。另外,当degree高于15时,R出现警告信息,而且当样本数据量较大时,设置过高的degree将非常危险。

cost是惩罚因子,可与任意核函数搭配,在本例中,分别取了1 2 3 4,发现cost越大越好。此外,cost与degree通常配合使用,在研究他们时,使用交叉验证法会得到更精确的结果。

gamma是选择径向基核函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。

Kernel指的是支持向量机的类型,实质上是一种映射函数,将低维空间非线性问题映射到高维空间编程线性问题进行处理。它可能是线性SVM(linear)、多项式SVM (polynomial)、径向SVM (radial)或Sigmoid SVM (sigmoid)。默认是径向SVM。其中性能最好是径向基核函数,其次是多项式核函数,最差的是神经网络核函数。

模型构建好后,可以通过summary函数获取模型的详细信息。

b.predict()模型预测函数.

c.table()函数,获取预测结果的频数。

主要参数pred和true也就是同一个数据的两列值,进行合并并统计出对应的因子的频数

通过table函数我们可以得到预测的真实结果的分布。如果觉得这样展示形式不友好,还可以变换:

d.plot()绘制SVM的可视化展示

此函数主要是绘制散点图可视化分类情况。

样例程序

library(e1071)

data(Glass,package="mlbench")

index

testindex

testset

trainset

svm.model

svm.pred

4.参数优化

a.tune.svm()寻求最优模型

此函数可以进行模型的优化,并获取相关的参数值。

b.自定义编程实现参数优化

a

for(i in 1:10){

for(j in 1:10){

for(k in 1:10){

svm.fit

svm.pre0,1,0)

n

result

a

}}}

a[which(a[,4]==max(a[,4])),]

总结,我们所涉及的是多分类问题。那么准确率,召回率以及F1-measure的计算公式如下图:

准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。

欢迎大家学习交流:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180424G0X3W700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券