1

如何使用 Weka API 通过 10 倍交叉验证来制作分类模型?我问这个,因为每次交叉验证的运行都会创建一个新的分类模型。我应该在测试数据中使用哪种分类模型?

4

2 回答 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 回答