【发布时间】:2018-01-02 19:33:08
【问题描述】:
我正在使用自己的词袋模型而不是 wekas StringToWordVector(结果是一个错误,但由于它只是一个学校项目,我想用我的方法完成它),所以我不能使用它CrossFoldEvaluation,因为我的 BoW 字典也会包含训练数据的单词。
for (int n = 0; n < folds; n++) {
List<String> allData = getAllReviews(); // 2000 reviews
List<String> trainingData = getTrainingReviews(n, folds); // random 1800 reviews
List<String> testData = getTestReviews(n, folds); // random 200 reviews
bagOfWordsModel.train(trainingData); // builds a vocabulary of 1800 training reviews
Instances inst = bagOfWordsModel.vectorize(allData); // returns 1800 instances with the class attribute set to positive or negative, and 200 without
// todo: evaluate
Classifier cModel = (Classifier) new NaiveBayes();
cModel.buildClassifier(inst);
Evaluation eTest = new Evaluation(inst);
eTest.evaluateModel(cModel, inst);
// print results
String strSummary = eTest.toSummaryString();
System.out.println(strSummary);
}
我现在该如何评估呢?我想,weka 会自动尝试确定类属性没有值的实例的类属性。但相反,它告诉我weka.filters.supervised.attribute.Discretize: Cannot handle missing class values!
【问题讨论】:
-
您想训练模型然后在未知数据上对其进行评估?交叉折叠验证需要一个已知的类标签,因为您无法在未知数据上进行训练。
-
嗯,但是如果我为测试数据分配一个类标签,wekas 评估如何区分测试数据和训练数据?请记住,我不能使用在 CrossFold 评估中内置的 wekas
-
如果你有一个测试集,无论如何你都不想使用交叉折叠验证 - What is cross-fold validation。您是否能够毫无问题地训练模型