2
我是Weka的新手。Weka中的UI和API代码给出了不同的结果
我想使用API运行WEKA,并发现WEKA GUI的结果与Java代码生成的结果不匹配。
我想通过提供TrainingSet和测试集来运行RandomForest算法。
这里是代码片段:
DataSource ds = new DataSource(trainingFile);
Instances insts = ds.getDataSet();
insts.setClassIndex(insts.numAttributes() - 1);
Classifier cl = new RandomForest();
RandomForest rf = (RandomForest)cl;
// rf.setOptions(options);
// rf.setNumExecutionSlots(1);
rf.setNumFeatures(5);
rf.setSeed(1);
rf.setNumExecutionSlots(1);
Remove remove = new Remove();
int[] attrs = WekaCustomisation.convertIntegers(attrList);
remove.setAttributeIndicesArray(attrs);
remove.setInvertSelection(true);
remove.setInputFormat(insts);
insts = weka.filters.Filter.useFilter(insts, remove);
insts.setClassIndex(insts.numAttributes() - 1);
weka.core.Instances train = new weka.core.Instances(insts, 0, insts.numInstances());
cl.buildClassifier(train);
weka.core.converters.ConverterUtils.DataSource ds2 = new weka.core.converters.ConverterUtils.DataSource(testFile);
weka.core.Instances instsTest = ds2.getDataSet();
remove.setInputFormat(instsTest);
instsTest = weka.filters.Filter.useFilter(instsTest, remove);
instsTest.setClassIndex(instsTest.numAttributes() - 1);
Instances testInstances = new Instances(instsTest);
int numCorrect = 0;
weka.classifiers.Evaluation eval = new weka.classifiers.Evaluation(train);
eval.evaluateModel(cl, testInstances);
System.out.println(eval.toSummaryString());
out.write(eval.toSummaryString());
double roc = eval.areaUnderROC(0);
由WEKA GUI产生的混淆矩阵和该代码不同。我在这里错过了什么。
报告的数字有何不同? – Steve 2012-08-09 10:10:45
混乱矩阵,如果我运行的训练集,它不是这样的分开。但它仍然不完全相同。如果我运行测试设置,它是分开的, 这是代码的结果:a b < - 归类为 104 47 | a = X 120 772 | b = Y For Weka UI a b < - 分类为 104 47 | a = X 41 851 | b = Y – Uno 2012-08-09 17:21:19