我试图找出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
?
我尝试调整一些选项,但似乎都没有。
答案 0 :(得分:0)
您只需要将training.truth
定义为因子,以便kvsm
默认情况下将类预测为类型(即“响应”)。那就是:
training.truth <- as.factor(spam[selection,58])
其余代码未触动,然后
mailtype <- predict(filter,test)
mailtype[1]
[1] -1
Levels: -1 1
希望它有所帮助。