Yan*_*Yan 1 r machine-learning svm weka
我的数据使用e1071包中的svm在s上产生了奇怪的结果,所以我试图检查R svm是否可以生成与WEKA(或python)相同的结果,因为我过去一直在使用WEKA.
我搜索了一个问题,发现一个与我完全相同的混淆,但没有答案.这是个问题.
所以我希望我能在这里得到答案.
为了方便起见,我还使用虹膜数据集,并使用整个虹膜数据训练模型(WEKA中的SMO和来自R包e1071的svm),并对其自身进行测试.
WEKA参数:
weka.classifiers.functions.SMO -C 1.0 -L 0.001 -P 1.0E-12 -N 0 -V 10 -W 1 -K "weka.classifiers.functions.supportVector.RBFKernel -G 0.01 -C 250007"
Run Code Online (Sandbox Code Playgroud)
除了默认情况,我将内核更改为RBFKernel以使其与R fucntion一致.
结果是:
a b c <-- classified as
50 0 0 | a = Iris-setosa
0 46 4 | b = Iris-versicolor
0 7 43 | c = Iris-virginica
Run Code Online (Sandbox Code Playgroud)
R脚本:
library(e1071)
model <- svm(iris[,-5], iris[,5], kernel="radial", epsilon=1.0E-12)
res <- predict(model, iris[,-5])
table(pred = res, true = iris[,ncol(iris)])
Run Code Online (Sandbox Code Playgroud)
结果是:
true
pred setosa versicolor virginica
setosa 50 0 0
versicolor 0 48 2
virginica 0 2 48
Run Code Online (Sandbox Code Playgroud)
我不是机器学习者,所以我猜这两种方法的默认参数非常不同.例如,e1071默认为0.01 epsilon,WEKA为1.0E-12.我试着阅读手册并想让所有参数都相同,但很多参数似乎与我不相上下.
谢谢.
有关SMO的RWeka参数,请参阅http://weka.sourceforge.net/doc.dev/weka/classifiers/functions/SMO.html,并使用?svm查找e1071 svm实现的相应参数.
根据?svm,R e1071 svm是libsvm的接口,似乎使用标准的QP求解器.
对于k级为k> 2的多类分类,libsvm使用"一对一"方法,其中训练k(k-1)/ 2个二元分类器; 通过投票方案找到合适的班级.libsvm在内部使用稀疏数据表示,SparseM包也支持高级数据.
相反?在RWeka的SMO
实现John C. Platt的顺序最小优化算法,用于使用多项式或RBF内核训练支持向量分类器.使用成对分类解决了多类问题.
因此,这两种实现通常是不同的(因此结果可能会略有不同).如果我们选择相应的超参数相同,那么混淆矩阵几乎是相同的:
library(RWeka)
model.smo <- SMO(Species ~ ., data = iris,
control = Weka_control(K = list("RBFKernel", G=2), C=1.0, L=0.001, P=1.0E-12, N=0, V=10, W=1234))
res.smo <- predict(model.smo, iris[,-5])
table(pred = res.smo, true = iris[,ncol(iris)])
true
pred setosa versicolor virginica
setosa 50 0 0
versicolor 0 47 1
virginica 0 3 49
library(e1071)
set.seed(1234)
model.svm <- svm(iris[,-5], iris[,5], kernel="radial", cost=1.0, tolerance=0.001, epsilon=1.0E-12, scale=TRUE, cross=10)
res.svm <- predict(model.svm, iris[,-5])
table(pred = res.svm, true = iris[,ncol(iris)])
true
pred setosa versicolor virginica
setosa 50 0 0
versicolor 0 49 1
virginica 0 1 49
Run Code Online (Sandbox Code Playgroud)
另请参阅:[ https://stats.stackexchange.com/questions/130293/svm-and-smo-main-differences] [1 ]和[ https://www.quora.com/Whats-the-差之间-LIBSVM和- LibLinear] [1]