如果我目前在我的 Java 代码中使用 Weka 决策树(或其他)分类器,如下所示:
// Get training and testing data.
Instances train = new Instances ("from training file");
train.setClassIndex(train.numAttributes() - 1);
Instances test = new Instances ("from testing file");
test.setClassIndex(test.numAttributes() - 1);
// Set classifier.
Object obj = Class.forName("weka.classifiers.trees.J48").newInstance();
Classifier cls = (Classifier) Class.forName("weka.classifiers.trees.J48").cast(obj);
// Set parameters for classifier.
String options = ("-C 0.05 -M 2");
String[] optionsArray = options.split(" ");
cls.setOptions(optionsArray);
// Train classifier.
cls.buildClassifier(train);
Evaluation eval = new Evaluation(train);
// Test trained classifier.
eval.evaluateModel(cls, test);
如果我想使用元分类器(例如 bagging)来尝试提升结果,会发生什么?在 Weka 的资源管理器中,如果我对训练和测试数据使用 bagging,分类器的参数字符串为:
weka.classifiers.meta.Bagging -P 100 -S 1 -num-slots 1 -I 10 -W weka.classifiers.trees.J48 -- -C 0.25 -M 2
有谁知道这可能是什么代码表示?
理想情况下,我想将分类器和元分类器的类存储在数据库表中,即这样一行:
Object obj = Class.forName("weka.classifiers.trees.J48").newInstance();
变成:
Object obj = Class.forName(classifier.getWekaClass()).newInstance();
如果我将分类器从 J48 切换到 NB,参数也可以在数据库表中列出,以便于更改它们。
我相信这就是我正在寻找的,但是......
http://weka.wikispaces.com/Use+WEKA+in+your+Java+code#Attribute selection-Meta-Classifier