2016-12-11 2 views
1

Я пытаюсь протестировать один экземпляр, используя API weka в Java. Моя цель - предсказать значение класса для одного экземпляра в файле test.arff.Как проверить один экземпляр в Weka с помощью модели, которую я создал?

Мой ява код выглядит так,

import weka.core.Instances; 
import weka.classifiers.Evaluation; 
import weka.classifiers.trees.J48; 
import weka.classifiers.*; 

import java.io.*; 
import java.util.Random; 

public class WekaNew { 

    public static void main(String[] args) throws Exception{ 
     // TODO Auto-generated method stub 
     System.out.println("Weka Tool"); 

     BufferedReader breader = new BufferedReader(new FileReader("train.arff")); 
     Instances train = new Instances(breader); 
     train.setClassIndex(train.numAttributes() -1); 
     breader.close(); //loading training data 

     BufferedReader treader = new BufferedReader(new FileReader("test.arff")); 
     Instances test = new Instances(treader); 
     test.setClassIndex(test.numAttributes() -1); 
     treader.close();  //loading testing data 

     Classifier cls = new J48(); 
     cls.buildClassifier(train); 

     Evaluation eval = new Evaluation(train); 
     eval.evaluateModelOnce(cls,test); 

     System.out.println(eval.toMatrixString("\nConfusion Matrix\n========\n")); 

    } 

} 

train.arff имеет 7 (атрибуты) +1 (класс Label) наряду с 132 экземплярами данных. Test.arff имеет 7 атрибутов + 1 класс label =? с одним экземпляром.

Я хочу предсказать метку класса для единственного экземпляра в test.arff. Как мне спрогнозировать метку и какие изменения необходимо внести в набор данных и код?

Я попытался компиляции файла Java с помощью «JAVAC -cp„/ классам“WekaNew.java» , он дает следующее сообщение об ошибке «Нет подходящий метод нашел для evaluateModelOnce()»

Новое в деградируют API и Java в целом. Извините заранее, если вопрос повторится.

Я также упомянул следующие вопросы в Stackoverflow, 1. Test single instance in weka which has no class label 2. Test a single instance in Weka , но это не похоже, чтобы решить мою проблему.

ответ

1

Это подпись evaluateModelOnce:

public double evaluateModelOnce(Classifier classifier, 
           Instance instance) 

(см http://weka.sourceforge.net/doc.stable/weka/classifiers/Evaluation.html#evaluateModelOnce-weka.classifiers.Classifier-weka.core.Instance-)

Однако, вы передаете в "Экземпляры" вместо "Instance", которые являются различные классы. Таким образом, это синтаксическая ошибка.

Для оценки одного Weka экземпляра, вы можете попробовать

eval.evaluateModelOnce(cls,instances.firstInstance()); 
+0

Спасибо большое! Работает как шарм! Есть ли способ идентифицировать метку класса тестового экземпляра? –

+0

Можете ли вы уточнить, что вы хотите сделать? Вы уже знаете, что метка класса находится в 'test.numAttributes() -1', правильно? –

Смежные вопросы