R语言实现支持向量机SVM应用案例

本文主要介绍了R语言实现支持向量机SVM应用案例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

IRIS数据集简介

IRIS数据集中的数据源于1936年费希尔法发表的一篇论文。彼时他收集了三种鸢尾花(分别标记为setosa、versicolor和virginical)的花萼和花瓣数据。包括花萼的长度和宽度,以及花瓣的长度和宽度。我们将根据这四个特征来建立支持向量机模型从而实现对三种鸢尾花的分类判别任务。

有关数据可以从datasets软件包中的iris数据集里获取,下面我们演示性地列出了前5行数据。成功载入数据后,易见其中共包含了150个样本(被标记为setosa、versicolor和virginica的样本各50个),以及四个样本特征,分别是Sepal.Length、Sepal.Width、Petal.Length和Petal.Width。

 > iris Sepal.Length Sepal.Width Petal.Length Petal.Width    Species 1            5.1         3.5          1.4         0.2     setosa 2            4.9         3.0          1.4         0.2     setosa 3            4.7         3.2          1.3         0.2     setosa 4            4.6         3.1          1.5         0.2     setosa 5            5.0         3.6          1.4         0.2     setosa 6            5.4         3.9          1.7         0.4     setosa 7            4.6         3.4          1.4         0.3     setosa 8            5.0         3.4          1.5         0.2     setosa 9            4.4         2.9          1.4         0.2     setosa 10           4.9         3.1          1.5         0.1     setosa

在正式建模之前,我们也可以通过一个图型来初步判定一下数据的分布情况,为此在R中使用如下代码来绘制(仅选择Petal.Length和Petal.Width这两个特征时)数据的划分情况。

 library(lattice) xyplot(Petal.Length ~ Petal.Width, data = iris, groups = Species, auto.key = list(corner=c(1, 0)))

上述代码的执行结果如图14-13所示,从中不难发现,标记为setosa的鸢尾花可以很容易地被划分出来。但仅使用Petal.Length和Petal.Width这两个特征时,versicolor和virginica之间尚不是线性可分的。

image

函数svm()在建立支持向量机分类模型时有两种方式。第一种是根据既定公式建立模型,此时的函数使用格式为:

svm(formula, data= NULL, subset, na.action = na.omit , scale= TRUE) 

其中:

  • formula表示函数模型的形式
  • data表示在模型中包含的有变量的一组可选格式数据
  • 参数na.action用于指定当样本数据中存在无效的空数据时系统应该进行怎样的处理。默认值na.omit表示程序会忽略那些数据缺失的样本。另外一个可选的赋值为na.fail,它指示系统在遇到空数据时给出一条错误信息。
  • 参数scale为一个逻辑向量指定特征是护具是否需要标准化(默认标准化为均值0,方差1)
  • 索引向量subset用于指定那些将来将被用来训练模型的采样数据。

例如,已经知道仅用Petal.Length和Petal.Width这两个特征时标记为setosa和versicolor的鸢尾花是线性可分的,所以我们用下面的代码来构建SVM模型:

 data(iris) attach(iris) subdata <- iris[iris$Species != 'virginica', ] subdata$Speices <- factor(subdata$Species) model1 <- svm(Species ~ Petal.Length + Petal.Width, data = subdata) plot(model1, subdata, Petal.Length ~ Petal.Width)

绘制的模型如下:

image

在使用第一种格式建立模型时,若使用数据中的全部特征变量作为模型特征变量时,可以简要地使用“Species~.”中的“.”代替全部的特征变量。例如下面的代码就利用了全部四种特征来对三种鸢尾花进行分类。

 model2 <- svm(Species~., data = iris) summary(model2)

summary函数的结果如下:

 > model2 <- svm(Species~., data = iris) > summary(model2) Call: svm(formula = Species ~ ., data = iris) Parameters: SVM-Type:  C-classification SVM-Kernel:  radial cost:  1 gamma:  0.25 Number of Support Vectors:  51 ( 8 22 21 ) Number of Classes:  3 Levels: setosa versicolor virginica

通过summary函数可以得到关于模型的相关信息。

  • 其中,SVM-Type项目说明本模型的类别为C分类器模型;
  • SVM-Kernel项目说明本模型所使用的核函数为高斯内积函数且核函数中参数gamma的取值为0.25;
  • cost项目说明本模型确定的约束违反成本为1;
  • 此外我们可以看到,模型找到了51个支持向量:第一类包含有8个支持向量,第二类包含有22个支持想想,第三类包含21个支持向量。
  • 最后一行说明模型中的三个类别分别为setosa、versicolor和virginica。

第二种使用svm()函数的方式则是根据所给的数据建立模型。这种方式形式要复杂一些,但是它允许我们以一种更加灵活的方式来构建模型。它的函数使用格式如下(注意我们仅列出了其中的主要参数)。

 svm(x, y = NULL, scale = TRUE, type = NULL, kernel = "radial", degree = 3, gamma = if (is.vector(x)) 1 else 1 / ncol(x), coef0 = 0, cost = 1, nu = 0.5, subset, na.action = na.omit)  

其中:

  • x可以是一个数据矩阵,也可以是一个数据向量,同时也可以是一个稀疏矩阵。y是对于x数据的结果标签,它既可以是字符向量也可以为数值向量。x和y共同决定了将要用来建模的训练数据以及模型的积分形式
  • 参数type用于指定建立模型的类别。支持向量机模型通常可以用作分类模型、回归模型和异常检查模型。根据用途的不同,在svm函数中的type可取的值为C-classification、nu-classification、one-classification、eps-regression和nu-regression这五种类型。其中前三种是针对于字符结果变量的分类方式,其中第三种方式为逻辑判别,即判别结果输出所需判别样本是否属于该类别。而后两种则是针对数值型结果变量的分类方式。
  • kernel是指在模型的建立过程中使用的核函数。针对线性不可分的问题,为了提高模型预测精度,通常会只用核函数对原始数据进行变换,提高原始特征维度,解决支持向量机模型线性不可分的问题。svm函数中kernel参数有四个可选核函数,分别为线性核函数、多项式核函数、高斯核函数及神经网络核函数。其中,高斯核函数与多项式核函数被认为是性能最好、也是最常用的核函数。

核函数有两种主要类型:局部性核函数和全局性核函数,高斯核函数是一个典型的局部性核函数,而多项式核函数则是一个典型的全局性核函数。局部性核函数仅仅在测试点附近小邻域内对数据点有影响,其学习能力强,泛化性能较弱;而全局性核函数则相对来说泛化性能较强,学习能力较弱。

  • 对于选定的核函数,degree参数是指核函数多项式内积函数中的参数,其默认值为3。gamma参数给出了一个核函数中除线性内积函数以外的所有函数的参数,默认值为1.coef0参数是指核函数中多项式内积函数sigmoid内积函数的中的参数,默认值为0.
  • 参数cost是软间隔模型中离群点权重
  • <

    以上就是R语言实现支持向量机SVM应用案例的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » R语言