实际上,我知道有一种GUI方法可以在weka,see here中对每个折叠的结果进行10次交叉验证,但我正在使用weka api进行编程。
不幸的是,来自java程序的我的结果My results
与weka的探索GUI results
中的结果完全不同。我的代码是下面的部分图像描述,
Instances data1 = DataSource.read("D:/Users/.../XX.arff"); // upload the dataset
data1.setClassIndex(data1.numAttributes()-1); // set class index
data1.randomize(new Random(1))
data1.stratify(10); // stratify the dataset into 10 folds
for(int i=0; i<10; i++){
Instances train = data1.trainCV(10, i);
Instances test = data1.testCV(10, i);
RandomForest rf = new RandomForest();
rf.buildClassifier(train);
Evaluation eval = new Evaluation(train);
eval.evaluateModel(rf, test);
... // then I compute each folds' results using eval.XXX()
}
上面的10倍交叉验证代码计算得到的结果与标准weka GUI得到的结果不同,我不知道我的代码哪个部分错了?任何人都可以遇到和我一样的问题吗?
答案 0 :(得分:0)
是的,在浪费了这么多时间探索为什么平均10倍的结果与WEKA的最终10倍交叉验证结果不匹配之后,我终于找到了3分,
1)我的Java代码是正确的,这意味着 randomize(),分层(), trainCV()和 testCV()使用正确。
2)WEKA中10倍交叉验证的结果与每次折叠结果的平均值不相等。
3)通过混淆矩阵计算WEKA中10倍交叉验证的结果。
对于第三点,例如,在每个折叠中,WEKA将获得precision
,recall
,f-measure
,AUC
,ROC
,{{ 1}}这样的度量以及混淆矩阵,定义为cm(i)。然后,10倍交叉验证的最终结果也可以得到混淆矩阵CM,其定义为,
errorRate
最后,CM = cm(1) + cm(2) + ... cm(10)
,precision
,recall
,f-measure
,AUC
这样的衡量标准是由这个混淆矩阵CM计算出来的,这真的让我高兴了很多@ ^ @。