【问题标题】:Cross Validation - Weka API交叉验证 - Weka API
【发布时间】:2013-10-10 15:06:12
【问题描述】:

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

【问题讨论】:

    标签: machine-learning weka cross-validation


    【解决方案1】:

    执行交叉验证:

    // 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();
    

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

      • 你知道如何得到每个折叠的结果吗?假设我想为应用.crossValidateModel()Evaluation 对象上的每个折叠获取所有十个pctCorrect()
      • 我不知道该怎么做。我看到了您的另一个 question,看起来您尝试自己进行交叉验证是在正确的轨道上。
      • 哦,没关系,我很感激你对我的方法满意 :D 谢谢你的回复!
      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 2021-12-10
      • 2014-09-16
      • 2013-08-16
      • 2019-07-27
      • 2023-04-05
      相关资源
      最近更新 更多