专栏首页R语言交流中心R语言实现支持向量机(SVM)

R语言实现支持向量机(SVM)

支持向量机(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的可视化展示

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

  1. 样例程序

library(e1071)

data(Glass,package="mlbench")

index<- 1:nrow(Glass)

testindex<- sample(index, trunc(length(index)/3))

testset<- Glass[testindex,]

trainset<- Glass[-testindex,]

svm.model<- svm(Type ~ ., data = trainset, cost = 100, gamma = 1)

svm.pred <- predict(svm.model,testset[,-10])

4. 参数优化

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

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

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

a<-c() for(i in 1:10){ for(j in 1:10){ for(k in 1:10){ svm.fit<- svm(Type ~ .,data = trainset, cost = 100, gamma = 1)

svm.pre<-ifelse(predict(svm.fit)>0,1,0) n<-ifelse(svm.pre==z,1,0) result<-c(i,j,k,sum(n)) a<-rbind(a,result) }}} a[which(a[,4]==max(a[,4])),]

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

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

本文分享自微信公众号 - R语言交流中心(R_statistics),作者:一粒沙

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R语言实现网页版词云图的绘制

    今天我们为大家介绍一个简单的词云图绘制的R包wordcloud2,这个包借助shiny框架实现了图像的可交互。废话不多说,接下来我们看下它的使用。

    一粒沙
  • R语言内存的管理

    R语言中内存是我们平时不怎么注意的一个方面,但是R语言的内存占有率还是很高的。尤其是在对大型数据的处理过程中,每当你复制你的变量或者创建新的变量都会占用新的内存...

    一粒沙
  • R语言实现多序列比对(MSA)可视化

    其它的颜色我们就不一一试了。接下来我们看下,font=NULL,去掉背景之后的样子:

    一粒沙
  • 应用统计平台架构设计:智能预测APP统计数据

    前言:近期,智能大数据服务商“个推”推出了应用统计产品“个数”,今天我们就和大家来谈一谈个数实时统计与AI数据智能平台整合架构设计。

    个推君
  • 统计vs机器学习,数据领域的“少林和武当”!

    虽然这两个学派的目的都是从数据中挖掘价值,但彼此“互不服气”。注重模型预测效果的人工智能派认为统计学派“固步自封”,研究和使用的模型都只是一些线性模型,太过简单...

    IT派
  • 中国台湾大学林轩田机器学习基石课程学习笔记16(完结) -- Three Learning Principles

    上节课我们讲了一个机器学习很重要的工具——Validation。我们将整个训练集分成两部分:DtrainD_{train}和DvalD_{val},一部分作为机...

    红色石头
  • 实时识别字母:深度学习和 OpenCV 应用搭建实用教程

    这是一个关于如何构建深度学习应用程序的教程,该应用程序可以实时识别由感兴趣的对象(在这个案例中为瓶盖)写出的字母。

    AI研习社
  • 数据科学“内战”:统计vs.机器学习

    大数据文摘
  • 数据科学

    版权声明:本文为博主-姜兴琪原创文章,未经博主允许不得转载。 https://blog.csdn.net/jxq0816/article/details...

    week
  • 网页设计有难题?12款网页设计模板给你灵感!

    作为网页设计师,你的作品就是你专业水平的最好体现方式。所以,无论是参加面试还是个人作品展示,你的网页模型是否能让人眼前一亮,是否能在交互设计或视觉设计方面突出任...

    奔跑的小鹿

扫码关注云+社区

领取腾讯云代金券