Machine learning 交叉验证-Weka API

Machine learning 交叉验证-Weka API,machine-learning,weka,cross-validation,Machine Learning,Weka,Cross Validation,如何使用Weka API通过10倍交叉验证建立分类模型?我这样问是因为每次交叉验证都会创建一个新的分类模型。我应该在测试数据中使用哪种分类模型?10倍交叉验证用于获得分类器精度的估计值,如果该分类器是从所有训练数据构建的。当感觉没有足够的数据用于独立的测试集时,使用该方法。这意味着您在预测未来数据时,应根据所有培训数据构建新模型。10倍交叉验证的结果是对新分类器性能的猜测 下面的代码显示了一个通过API使用Weka交叉验证,然后从整个培训数据集构建新模型的示例 //Training in

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

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

如果分类器是从所有训练数据构建的,则使用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

使用以下工具执行交叉验证:

// 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();
//执行交叉验证
对于(int n=0;n
使用以下各项执行交叉验证:

// 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();
//执行交叉验证
对于(int n=0;n
您知道如何获得每个折叠的结果吗?假设我想获得应用了
评估
对象上每个折叠的所有十个
pctCorrect()
。我不知道该怎么做。我看到了你的另一个,看起来你自己做交叉验证的方法是正确的。哦,没关系,我很感激你同意我的方法:d谢谢你的回复!你知道如何得到每次折叠的结果吗?假设我想得到所有十个
pctCorrect()
对于应用了
.crossValidateModel()
评估对象上的每一次折叠,我不知道该怎么做。我看到了你的另一次折叠,看起来你自己尝试进行交叉验证是对的。哦,没关系,我很感谢你同意我的方法:谢谢你的回复!