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