SVM支持向量机(五)使用R语言和libSVM体验支持向量机

一、R语言中的svm拓展包

library(rpart)
library(e1071)
summary(kyphosis) #该数据集是二分类数据集,主要是研究佝偻病的

model <- svm(Kyphosis~.,data=kyphosis)
summary(model)
Call:
svm(formula = Kyphosis ~ ., data = kyphosis)


Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  radial 
       cost:  1 
      gamma:  0.3333333 

Number of Support Vectors:  39

 ( 22 17 )


Number of Classes:  2 

Levels: 
 absent present



> print(model)

Call:
svm(formula = Kyphosis ~ ., data = kyphosis)


Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  radial 
       cost:  1 
      gamma:  0.3333333 

Number of Support Vectors:  39

> pre.svm <- predict(model,kyphosis)
> table(pre.svm,kyphosis$Kyphosis)
         
pre.svm   absent present
  absent      64       9
  present      0       8

竟然有39个支持向量,醉了,错判了不少

二、使用libSVM

    libSVM要求数据的格式为  lebel 1:feather1 2:feather2…… ,所以我们先用R将数据导出来,变成libSVM要求的格式

> nrow(kyphosis)
[1] 81
> kyphosis$label <- rep(1,81)
> kyphosis$label[kyphosis$Kyphosis == "present"] <- -1 #貌似,svmlib并不支持label为字符串,我们改下
> attach(kyphosis)
> x <- paste(label,paste(rep('1:',81),Age,sep=""),paste(rep('2:',81),Number,sep=""),
    paste(rep('3:',81),Start,sep=""))
> cat(x,file="D:\\kyphosis",sep="\n")
> detach(kyphosis)

接下来,下载最新的libsvm,解压即可。我们是在windows下使用命令行,所以切换到windows目录下,运行命令。第一个参数是我们要训练的样本集,格式上面已经有了。第二个参数是,训练结果放到哪个文件里。

SVM支持向量机(五)使用R语言和libSVM体验支持向量机_第1张图片

结果看起来比较奇怪,因为我明明输入了81个向量,但是上面提示我们竟然只有80个向量,看来这个libsvm还要好好研究。打开d盘下刚生成的文件,看到了结果
svm_type c_svc
kernel_type rbf
gamma 0.333333
nr_class 2
total_sv 80
rho -0.704193
label 1 -1
nr_sv 63 17
SV
0.2957023283614098 1:71 2:3 3:5
0.7020252143132901 1:158 2:3 3:14
0.2957450157648035 1:2 2:5 3:1
0.2173212910315528 1:1 2:4 3:15
0.1527135829187825 1:1 2:2 3:16
0.2961650450851596 1:61 2:2 3:17
0.2886043907845061 1:37 2:3 3:16
…………


你可能感兴趣的:(SVM支持向量机(五)使用R语言和libSVM体验支持向量机)