我正在尝试在 Weka 中训练一个 MultiClassClassifier
模型,并将基础算法设置为 weka.classifiers.functions.supportVector.RegSMOImproved
类,选项如下:
MultiClassClassifier cModel = new MultiClassClassifier(); String options[] = { "weka.classifiers.meta.MultiClassClassifier", "-M","0", "-R","2.0", "-S","1", "-W","weka.classifiers.functions.supportVector.RegSMOImproved", "-P","1.0e-12", "-L","1.0e-3", "-W","1" }; try { cModel.setOptions(options); } catch (Exception e) { e.printStackTrace(); }
当我运行代码时,得到以下错误:
java.lang.Exception: 找不到名为 weka.classifiers.functions.supportVector.RegSMOImproved 的类 at weka.core.Utils.forName(Utils.java:1073) at weka.classifiers.AbstractClassifier.forName(AbstractClassifier.java:90) at weka.classifiers.SingleClassifierEnhancer.setOptions(SingleClassifierEnhancer.java:108) at weka.classifiers.RandomizableSingleClassifierEnhancer.setOptions(RandomizableSingleClassifierEnhancer.java:93) at weka.classifiers.meta.MultiClassClassifier.setOptions(MultiClassClassifier.java:802) at myApp.Main.trainMultiClassClassifier(Main.java:983) at myApp.Main.createSets(Main.java:903) at myApp.Main.main(Main.java:387)
如果不是 weka.classifiers.functions.supportVector.RegSMOImproved
,那么使用 RegSMOImproved 算法的正确类路径是什么?
我是否遗漏了其他东西,比如额外的设置,或者某种父类?
我使用的是从 这里 下载的 Weka 开发者分支。如果我无意中遗漏了什么,请告诉我,我会尽快进行编辑。
提前感谢您。
编辑 1:
我正在尝试实现多类分类,我希望训练我的模型/模型为一个类与其他类对比。我的数据是平衡的(每个类别有100个样本)。这是我目前找到的资料:
http://weka.8497.n7.nabble.com/meta-multi-class-classifier-with-the-option-smo-td26548.html
编辑 2:
所以我更改了我的选项对象为:
String options[] = { "-M","0", "-R","2.0", "-S","1", "-W","weka.classifiers.functions.SMO", "--", "-C","1", "-L","0.001", "-P","1.0e-12", "-M", "-N", "0", "-V","-1", "-W","1", "-K", "weka.classifiers.functions.supportVector.PolyKernel -C 250007 -E 1.0" };
这似乎可以通过 setOptions()
方法,因此我显然混淆了 supportVector
和 functions
包中的两个 SMO 类。我还读到,为了让 MultiClassClassifier 正确工作,我需要为 SMO 设置 -M
和 -V
属性。所以我通过 -M 属性开启了“对 SVM 输出进行拟合校准模型”,并通过 -V 属性将交叉验证的折数设置为 -1(默认值)。
我认为交叉验证的折数属性必须为测试目的而设置。从这一点开始,我需要查看关于交叉验证的帖子。
再次感谢您!
回答:
A) 除非您有特定的需求,否则您可能不应该使用开发者分支。据我们所知,他们可能正在移动一些东西,并且可能存在一些问题。
B) RegSMOImproved 是用于回归的,而不是分类。因此,您的一些问题可能是由于 MultiClassClassifier 和回归算法之间的不匹配造成的。