为什么`predict.ksvm`不能预测班级标签?

时间:2016-03-23 08:35:32

标签: r svm

我试图找出ksvm(kernlab)和svm(e1071)之间的性能差异。

我正在使用kernlab软件包中的垃圾邮件数据库。

最小工作示例

library("kernlab")
data(spam)

##replacing "spam" labels with 1 or -1
type= ifelse(spam[,58]=="spam",1,-1)
spam <- spam[,-58]
spam <- cbind(spam, type)

## create test and training set
spam <- spam[sample(1:4601),] #random permutation
selection <- 1:2300
training <- spam[selection,-58]
training.truth <- spam[selection,58]
test <- spam[-selection, -58]
test.truth <- spam[-selection, 58]

## train a support vector machine
filter <- ksvm(training.truth~.,
               data=training,
               kernel="rbfdot",
               class="C-svc",
               kpar=list(sigma=0.05),C=5)

## predict mail type on the test set
mailtype <- predict(filter,test)

mailtype[1,]  ## returns -0.2459927

为什么返回-0.2459927,为什么不返回标签1-1? 我尝试调整一些选项,但似乎都没有。

1 个答案:

答案 0 :(得分:0)

您只需要将training.truth定义为因子,以便kvsm默认情况下将类预测为类型(即“响应”)。那就是:

training.truth <- as.factor(spam[selection,58])

其余代码未触动,然后

mailtype <- predict(filter,test)

mailtype[1]
[1] -1
Levels: -1 1

希望它有所帮助。