【发布时间】:2018-04-03 13:30:05
【问题描述】:
我正在使用 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 在 weka.core.RelationalLocator.copyRelationalValues(RelationalLocator.java:87) 在 weka.filters.Filter.copyValues(Filter.java:405) 在 weka.filters.Filter.push(Filter.java:326) 在 weka.filters.unsupervised.attribute.StringToWordVector.input(StringToWordVector.java:655) 在 weka.classifiers.meta.FilteredClassifier.filterInstance(FilteredClassifier.java:672) 在 weka.classifiers.meta.FilteredClassifier.distributionForInstance(FilteredClassifier.java:699) 在 weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) 在 test.WekaClassification.main(WekaClassification.java:66)
我不太明白我在这里做错了什么。为什么属性数量不匹配?这是在 testData 集中应用训练模型的正确方法吗?
【问题讨论】:
-
您能否更新一下您的训练和测试数据样本?仅举几个例子。 Weka 要求测试数据与训练数据具有完全相同的属性。
-
训练数据是:使用#而不是@(因为@用于在回复时引用用户)#relation 'myrelationName' #attribute myText string #attribute myclass {fireperformance,地震,原材料,湿度、市场、振动} #data 'someText',vibration 'someText',fireperformance 'someText', 地震 ______________________________ Testdata #relation 'myrelationName' #attribute myText string #attribute myclass {fireperformance,地震,原材料,湿度,市场,振动} #data 'someText',? 'someText',? 'someText', ?
标签: java weka naivebayes