Machine learning 交叉验证-Weka API
如何使用Weka API通过10倍交叉验证建立分类模型?我这样问是因为每次交叉验证都会创建一个新的分类模型。我应该在测试数据中使用哪种分类模型?10倍交叉验证用于获得分类器精度的估计值,如果该分类器是从所有训练数据构建的。当感觉没有足够的数据用于独立的测试集时,使用该方法。这意味着您在预测未来数据时,应根据所有培训数据构建新模型。10倍交叉验证的结果是对新分类器性能的猜测 下面的代码显示了一个通过API使用Weka交叉验证,然后从整个培训数据集构建新模型的示例Machine learning 交叉验证-Weka API,machine-learning,weka,cross-validation,Machine Learning,Weka,Cross Validation,如何使用Weka API通过10倍交叉验证建立分类模型?我这样问是因为每次交叉验证都会创建一个新的分类模型。我应该在测试数据中使用哪种分类模型?10倍交叉验证用于获得分类器精度的估计值,如果该分类器是从所有训练数据构建的。当感觉没有足够的数据用于独立的测试集时,使用该方法。这意味着您在预测未来数据时,应根据所有培训数据构建新模型。10倍交叉验证的结果是对新分类器性能的猜测 下面的代码显示了一个通过API使用Weka交叉验证,然后从整个培训数据集构建新模型的示例 //Training in
//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()
的评估对象上的每一次折叠,我不知道该怎么做。我看到了你的另一次折叠,看起来你自己尝试进行交叉验证是对的。哦,没关系,我很感谢你同意我的方法:谢谢你的回复!