【发布时间】:2013-10-10 15:06:12
【问题描述】:
如何使用 Weka API 通过 10 倍交叉验证来制作分类模型?我问这个,因为每次交叉验证的运行都会创建一个新的分类模型。我应该在测试数据中使用哪种分类模型?
【问题讨论】:
标签: machine-learning weka cross-validation
如何使用 Weka API 通过 10 倍交叉验证来制作分类模型?我问这个,因为每次交叉验证的运行都会创建一个新的分类模型。我应该在测试数据中使用哪种分类模型?
【问题讨论】:
标签: machine-learning weka cross-validation
执行交叉验证:
// 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();
【讨论】:
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()。