R 和 WEKA 上的支持向量机
Posted
技术标签:
【中文标题】R 和 WEKA 上的支持向量机【英文标题】:Support Vector Machine on R and WEKA 【发布时间】:2017-02-24 07:39:08 【问题描述】:我的数据使用 e1071 包中的 R 上的 svm 生成了奇怪的结果,因此我尝试检查 R svm 是否可以生成与 WEKA(或 python)相同的结果,因为我过去一直在使用 WEKA。
我用谷歌搜索了这个问题,发现一个与我有完全相同的困惑但没有答案的问题。 This is the question.
所以我希望我能在这里得到答案。
为了让事情变得更简单,我还使用了 iris 数据集,并使用整个 iris 数据训练了一个模型(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"
除默认外,我将内核更改为 RBFKernel 以使其与 R 功能一致。
结果是:
a b c <-- classified as
50 0 0 | a = Iris-setosa
0 46 4 | b = Iris-versicolor
0 7 43 | c = Iris-virginica
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)])
结果是:
true
pred setosa versicolor virginica
setosa 50 0 0
versicolor 0 48 2
virginica 0 2 48
我不是机器学习的人,所以我猜测这两种方法的默认参数非常不同。例如,e1071 的默认值为 0.01 epsilon
,而 WEKA 的默认值为 1.0E-12。我试图通读手册,想让所有参数都相同,但很多参数似乎无法与我相提并论。
谢谢。
【问题讨论】:
【参考方案1】: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 训练支持向量分类器 内核。使用pairwise解决多类问题 分类。
所以,这两种实现大体上是不同的(所以结果可能会有些不同)。仍然如果我们选择相同的对应超参数,混淆矩阵几乎相同:
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
另请参阅:[https://stats.stackexchange.com/questions/130293/svm-and-smo-main-differences][1] 和此 [https://www.quora.com/Whats-the-difference-between-LibSVM-and-LibLinear][1]
【讨论】:
是的,你是对的,内核 K 将具有内核名称和带宽 gamma 作为列表。 感谢您的回答!但是对于一个 2 类问题,即使我设置了相同的参数,我也会得到两个非常不同的预测。是因为实现方式不同吗? SVM 和 SMO 用于多类分类的策略似乎是相同的(一对一)。对于二元分类,如果您研究所有可能的参数(包括默认参数)并将它们全部设置为相同,那么我的直觉是结果应该不会有太大差异,如果他们这样做是由于实现差异。 感谢您回复我。我使用 2 类数据问了一个类似的问题,它们的结果似乎截然不同。你能帮我看看吗?提前致谢! ***.com/questions/40065273/… 我刚开始使用R Weka,可以得到ROC AUC吗?我将不胜感激任何建议。以上是关于R 和 WEKA 上的支持向量机的主要内容,如果未能解决你的问题,请参考以下文章
R语言e1071包中的支持向量机:螺旋线型线性不可分数据集RBF核函数支持向量机SVM(验证模型在测试集上的表现可视化模型预测的结果添加超平面区域与原始数据标签进行对比分析)
数据分享|WEKA信贷违约预测报告:用决策树随机森林支持向量机SVM朴素贝叶斯逻辑回归|附代码数据
R语言e1071包中的支持向量机:仿真数据(螺旋线性不可分数据集)简单线性核的支持向量机SVM(模型在测试集上的表现可视化模型预测的结果添加超平面区域与原始数据标签进行对比分析)如何改进核函数