R中SVM的实现

2020-06-18 19:23

一、R中svm介绍

R的函数包e1071提供了libsvm的接口。使用e1071包中svm函数可以得到与libsvm相同的结果。write.svm()更是可以把R训练得到的结果写为标准的Libsvm格式,以供其他环境下libsvm的使用。下面我们来看看svm()函数的用法。有两种格式都可以。

svm(formula,data=NULL,…,subset,na.action=na.omit,sacle=TRUE) 或者

svm(x, y = NULL, scale = TRUE, type = NULL, kernel =

\coef0 = 0, cost = 1, nu = 0.5,

class.weights = NULL, cachesize = 40, tolerance = 0.001, epsilon = 0.1, shrinking = TRUE, cross = 0, probability = FALSE, fitted = TRUE, ..., subset, na.action = na.omit)

主要参数说明如下:

formula:分类模型形式,在第二个表达式中可以理解为y~x 即y相当于标签,x相当于特征(变量) data:数据框。

subset:可以指定数据集的一部分作为训练数据。 na.cation:缺失值处理,默认为删除缺失数据。

scale:将数据标准化,中心化,使其均值为0,方差为1,将自动执行。

type:svm的形式。为:C-classification ,nu-classification, one-classification (for novelty detection) ,eps-regression,

nu-regression 五种形式。后面两者为做回归时用到。默认为C分类器。 kernel:在非线性可分时,我们引入核函数来做。R中提供的核函数如下 线性核:

u'*v 多项式核:

(gamma*u'*v + coef0)^degree

高斯核:

exp(-gamma*|u-v|^2) sigmoid核:

tanh(gamma*u'*v + coef0)

默认为高斯核。顺带说一下,在kernel包中可以自定义核函数。 degree:多项式核的次数,默认为3

gamma:除去线性核外,其他核的参数,默认为1/数据维数 coef0:多项式核与sigmoid核的参数,默认为0. cost:C分类中惩罚项c的取值 nu:Nu分类,单一分类中nu的值 cross:做k折交叉验证,计算分类正确性。

二、一个具体的小例子。

我们依然使用iris数据集来做svm分类。如下 > data(iris) > ir<-iris > set.seed(124)

> count.test<-round(runif(50,1,150)) > test<-ir[count.test,] > library(e1071)

>sv<-svm(Species~.,data=ir,cross=5,type='C-classification',kernel='sigmoid')

> summary(sv) #查看支持向量机sv的具体信息,发现做5倍交叉验

证的正确率为92%

> pre<-predict(sv,test) #对测试样本作预测。pre是一个类别向量。 > dim(test[test$Species!=pre,])[1]/dim(test)[1] #计算错误率 [1] 0.06

我们发现错误率为6%


R中SVM的实现.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《中外城建史》试卷A

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: