Как протестировать один экземпляр в Weka, используя созданную мной модель?

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

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

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 (метка класса) вместе со 132 экземплярами данных. В test.arff есть 7 атрибутов + 1 метка класса =? с ОДНИМ экземпляром.

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

Я попытался скомпилировать java-файл с помощью "javac -cp"/classpath" WekaNew.java", он дает следующую ошибку: "Не найден подходящий метод для оценкиModelOnce()"

Новое для Weka API и Java в целом. Заранее приносим извинения, если вопрос покажется повторяющимся.

Я также упомянул следующие вопросы в Stackoverflow, 1. Протестируйте один экземпляр в weka, у которого нет метки класса 2. Протестируйте один экземпляр в Weka, но, похоже, это не решает мою проблему.


person Shoeb Ahmed    schedule 11.12.2016    source источник


Ответы (1)


Это подпись оценкиModelOnce:

public double evaluateModelOnce(Classifier classifier,
                                Instance instance)

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

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

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

    eval.evaluateModelOnce(cls,instances.firstInstance());
person Marcel Steinbach    schedule 11.12.2016
comment
Большое спасибо! Работает как шарм! Можно ли как-нибудь определить метку класса тестового экземпляра? - person Shoeb Ahmed; 12.12.2016
comment
Можете ли вы уточнить, что вы хотите сделать? Вы уже знаете, что метка класса test.numAttributes() -1, верно? - person Marcel Steinbach; 13.12.2016