2017-10-23 3 views
0

私はWekaを使ってテキスト分類を行っています。 Weka GUIを使用してNaiveBayesモデルを作成しました。このモデルを保存してから、このモデルを使用してトレーニングセットのインスタンスを分類しようとしていました。私は次のエラーを取得していますWekaをJavaで使用してテストデータを分類するための訓練モデルを適用できません

 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 = weka.core.RelationalLocatorで1781 !これは私のコードです。 weka.filters.unsupervised.attributeの にあるweka.filters.Filter.copyValues(Filter.java:405) の場合は、 StringToWordVector.input(StringToWordVector.java:655) at weka.classifiers.meta.FilteredClassifier.filterInstance(FilteredClassifier.java:672) test.WekaClassification.mainでweka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173) でweka.classifiers.meta.FilteredClassifier.distributionForInstance(FilteredClassifier.java:699) で(WekaClassification.java:66)

私はここで間違っていることをかなり得ていません。なぜ属性の数に不一致がありますか?これは、訓練されたモデルをtestDataセットに適用する正しい方法ですか?

+0

トレーニングデータとテストデータのサンプルを使用して更新できますか?ちょうど少数のそれぞれの例。 Wekaは、テストデータがトレーニングデータとまったく同じ属性を持つことを要求します。 – SJB

+0

トレーニングデータがある: #relation 'myrelationName' #attribute MYTEXT列 #attribute MyClassの{fireperformance、地震、原材料、水分を(@を返信しながらユーザを指すために使用されるように)代わりの@#を使用して、市場、振動} #data 'someText'、振動 'someText'、fireperformance 'someText'、地震 ________________________________________ TESTDATA #relation 'myrelationName' #attribute MYTEXT列 #attribute MyClassの{fireperformance、地震、原材料、水分、市場、振動} #data 'someText' ,? 'someText' ,? 'someText'、? –

答えて

0

いくつかの可能性がありますが、あなたのエラーは、訓練されたデータセットと属性セットの属性の数が等しくないことを示しています。それらは完全に同じ形式、タイプ、および値でなければなりません。テストファイルには、label属性の値も含める必要があります。 Weka GUIで同じエラーが発生するかどうかを確認してください。 StringToWordVectorは手頃な価格でフィルタリングできません。その内容を見て出力を確認してください。

関連する問題