我正在使用Weka进行文本分类。我使用Weka GUI创建了一个NaiveBayes模型,我保存了该模型,然后尝试使用此模型对训练集的实例进行分类。这是我的代码:
Classifier clsClassifier = (Classifier) weka.core.SerializationHelper.read("Source/test/80percentModel.model");
StringToWordVector filter = new StringToWordVector();
BufferedReader reader = new BufferedReader(
new FileReader("Source/test/clt.train.arff"));
Instances trainingData = new Instances(reader);
reader.close();
trainingData.setClassIndex(trainingData.numAttributes() - 1);
filter.setInputFormat(trainingData);
BufferedReader reader2 = new BufferedReader(
new FileReader("Source/test/clt.test.arff"));
Instances testingData = new Instances(reader2);
reader2.close();
testingData.setClassIndex(testingData.numAttributes() - 1);
testingData = Filter.useFilter(testingData, filter);
System.out.println(testingData.numInstances());
for (int j = 0; j < testingData.numInstances(); j++) {
double res = clsClassifier.classifyInstance(testingData.get(j));
System.out.println(testingData.classAttribute().value((int)res));
}
我收到以下错误:
java.lang.IllegalArgumentException:Src和Dest的属性数不同:1!= 1781 at weka.core.RelationalLocator.copyRelationalValues(RelationalLocator.java:87) at weka.filters.Filter.copyValues(Filter.java:405) 在weka.filters.Filter.push(Filter.java:326) at weka.filters.unsupervised.attribute.StringToWordVector.input(StringToWordVector.java:655) at weka.classifiers.meta.FilteredClassifier.filterInstance(FilteredClassifier.java:672) at weka.classifiers.meta.FilteredClassifier.distributionForInstance(FilteredClassifier.java:699) at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) 在test.WekaClassification.main(WekaClassification.java:66)
我不知道我在这里做错了什么。为什么属性数量不匹配?这是在testData集中应用训练模型的正确方法吗?
答案 0 :(得分:0)
有一些可能性,但您的错误显示训练数据集和数据集中的属性数量不相等。它们必须完全采用相同的格式,类型和价值。测试文件还应具有label属性的值。检查Weka GUI中是否会出现相同的错误? StringToWordVector可能无法以经济实惠的方式过滤。通过观看内容来检查其输出。