【发布时间】:2017-12-09 22:44:34
【问题描述】:
实际上,我知道在 weka see here 中有一个 GUI 方法可以在 10 倍交叉验证中获取每个折叠的结果,但我正在使用 weka api 进行编程。
不幸的是,我在 java 程序中的结果 My results 与 weka 的 explore GUI results 中的结果完全不同。我的代码是下面给出的partenter图像描述,
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得到的结果不一样,不知道我的代码哪部分错了?有人能遇到和我一样的问题吗?
【问题讨论】:
-
我想 WEKA 可能不会将 10 折中结果的平均值作为最终结果,我每折中的 10 精度为
0.333 0.556 0.625 0.667 0.714 0.750 0.833 0.833 0.833 1.000,但结果在10 倍交叉验证是0.707。哦~~ -
for 循环中的每个评估都是唯一的,因为变量是新分配的。你实际上得到了你想要的。
-
这就是为什么我在每个 for 循环中实例化一个新的
Evaluation对象 eval,但我无法得到我想要的 :( 。我快疯了...... -
你能描述一下precision(in)和precision(out)是什么吗?
-
嗨,@ShaurabhBharti、
in和out在我的分类中是 2 个类,所以precision(in)是in类中的精度,而precision(out)是 @987654335 中的精度@类。
标签: java weka cross-validation