我生成了一个这样的随机数据集:

set.seed(1234)
df <- data.frame(replicate(10, runif(100, 0, 1)))
df$Class <- sample(c(-1,1), 100, replace=T)
df$Class <- as.factor(df$Class)

它有二进制类,100个样本和10个功能 .

我尝试使用svm in R (e1071包):

library(e1071)
set.seed(1234)
model <- svm(Class~.,data=df,kernel="radial",cost=1.0,tolerance=0.001,epsilon=1.0E-12,scale=TRUE,cross=10)
res <- predict(model, df[,-11])
table(pred=res, true=df[,11])  
summary(res)
summary(df$Class)

然后它给了我一个结果,如:

true
pred -1  1
  -1 49 13
  1   6 32

最初在数据中,两个类的样本编号是:

-1  1 
55 45

并且模型预测给出:

-1  1 
62 38

但是,当我将此数据输出到.arff文件并运行 with WEKA SMO时,并尝试设置与this question中描述的相同的参数:

weka.classifiers.functions.SMO -C 1.0 -L 0.001 -P 1.0E-12 -N 0 -V 10 -W 1234 -K "weka.classifiers.functions.supportVector.RBFKernel -G 0.1 -C 250007"

WEKA的所有100个预测都是-1级,即没有样本被预测为1级 .

这两个结果似乎非常不同 .

我想知道,如果这两种方法之间的其他参数如此不同 . 或者它只是完全不同的实现?如果是后者,请您解释一下它们究竟是如何工作的?我知道svm如何工作的要点,我无法想象为什么他们的表现如此不同,并且犹豫决定使用哪一个 .

非常感谢你 .

类似的问题here .