如何使用 Weka API 通过 10 倍交叉验证来制作分类模型?我问这个,因为每次交叉验证的运行都会创建一个新的分类模型。我应该在测试数据中使用哪种分类模型?
问问题
5467 次
2 回答
9
如果分类器是从所有训练数据构建的,则使用 10 倍交叉验证来估计分类器的准确性。当感觉没有足够的数据用于独立测试集时使用它。这意味着当你去预测未来的数据时,你应该从所有的训练数据中建立一个新的模型。10 倍交叉验证的结果是对您的新分类器应该执行的性能的猜测。
以下代码展示了通过 API 使用 Weka 的交叉验证,然后从整个训练数据集构建新模型的示例。
//Training instances are held in "originalTrain"
Classifier c1 = new NaiveBayes();
Evaluation eval = new Evaluation(originalTrain);
eval.crossValidateModel(c1, originalTrain, 10, new Random(1));
System.out.println("Estimated Accuracy: "+Double.toString(eval.pctCorrect()));
//Train a new classifier
Classifier c2 = new NaiveBayes();
c2.buildClassifier(originalTrain) //predict with this model
于 2013-10-03T19:33:29.213 回答
0
执行交叉验证:
// perform cross-validation
for (int n = 0; n < folds; n++) {
//Evaluation eval = new Evaluation(randData);
//get the folds
Instances train = randData.trainCV(folds, n);
Instances test = randData.testCV(folds, n);
ArffSaver saver = new ArffSaver();
saver.setInstances(train);
System.out.println("No of folds done = " + (n+1));
saver.setFile(new File("C:\\\\Users\\AmeerSameer\\Desktop\\mytrain.arff"));
saver.writeBatch();
//if(n==9)
//{System.out.println("Training set generated after the final fold is");
//System.out.println(train);}
ArffSaver saver1 = new ArffSaver();
saver1.setInstances(test);
saver1.setFile(new File("C:\\Users\\AmeerSameer\\Desktop\\mytest.arff"));
saver1.writeBatch();
于 2021-01-17T20:16:48.280 回答