我正在使用WEKA API使用KNN(IBk)分类器对我的数据集执行10倍交叉验证。我为K选择了一些值,并编写了一些简单的循环,为每个这样的K值执行CV。
当我查看结果时,我注意到即使我使用不同的K值,所有结果都是相同的。这怎么可能?为了澄清,我添加了代码行,我指定了我提供给分类器的选项。当我进行正常分类(因此没有交叉验证)时,这非常有效。
"-K " + k_value + " -W 0 -I -A \"weka.core.neighboursearch.LinearNNSearch -A \\\"weka.core.EuclideanDistance -R first-last\\\"\""
正如您所看到的,我在每次迭代中都更改了k_value
。请帮忙!
EDIT1 一些额外的代码可能会有所帮助。
Evaluation evaluation = new Evaluation(dataset);
evaluation.crossValidateModel(knn, dataset, 10, new Random(1), new Object[] {});
System.out.println("Error-rate " + evaluation.errorRate());
writer.println("AUROC: " + evaluation.areaUnderROC(0));
writer.println(evaluation.toClassDetailsString());
writer.println(evaluation.toMatrixString());
writer.println(evaluation.toSummaryString("\nResults\n======\n", true));
EDIT2
我没有用k_value
代替硬编码值(这里是10):
classification.setOptions(" -K 10 -W 0 -I -A \" weka.core.neighboursearch.LinearNNSearch -A \\" weka。 core.EuclideanDistance -R first-last \\" \"");
同样,我使用不同的K值执行与之前完全相同的结果。这怎么可能发生?这是怎么回事?这在weka中是正常的吗?