无法使用受过训练的模型来使用Java中的Weka对testdata进行分类

时间:2017-10-23 04:21:45

标签: java weka naivebayes

我正在使用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集中应用训练模型的正确方法吗?

1 个答案:

答案 0 :(得分:0)

有一些可能性,但您的错误显示训练数据集和数据集中的属性数量不相等。它们必须完全采用相同的格式,类型和价值。测试文件还应具有label属性的值。检查Weka GUI中是否会出现相同的错误? StringToWordVector可能无法以经济实惠的方式过滤。通过观看内容来检查其输出。