Как получить значение предикации для экземпляра в weka?

Я работаю над Weka и должен выводить значения предикации (вероятности) каждой метки для каждого тестового экземпляра.

в GUI есть опция на вкладке "классификация" как (classify - > options - > Output predicted value), которая делает эту работу, выводя вероятности прогнозирования для каждой метки, но как это сделать в коде java. Я хочу получить оценки вероятности для каждой метки после ее классификации ?

3 ответов


следующий код принимает набор обучающих экземпляров и выводит прогнозируемую вероятность для конкретного экземпляра.


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

public class Main {

    public static void main(String[] args) throws Exception
    {
        //load training instances
        Instances test=...

        //build a J48 decision tree
        J48 model=new J48(); 
        model.buildClassifier(test);

        //decide which instance you want to predict
        int s1=2;

        //get the predicted probabilities 
        double[] prediction=model.distributionForInstance(test.get(s1));

        //output predictions
        for(int i=0; i<prediction.length; i=i+1)
        {
            System.out.println("Probability of class "+
                                test.classAttribute().value(i)+
                               " : "+Double.toString(prediction[i]));
        }

    }

}

метод "distributionForInstance" работает только для классификаторов, способных выводить прогнозы распределения. Вы можете прочитать на нем здесь.


Я думаю, что нашел решение.

обучающий набор и тестовый набор должны быть равны: тот же заголовок, то же имя атрибутов, тот же порядок. Только меняет цифры. И возникает вопрос: почему я должен ставить класс в тестовый набор, если я его не знаю, и именно это я хочу получить? Кажется, что метод нуждается в чем-то, но когда вы посмотрите на classModel.distributionForInstance(dataModel.instance(0)) , это дает вам прогноз на ваших классах с массивом double. Итак, необходимо поставить некоторые значения классов в тестовом наборе, а затем ‘distributionForInstance’ дает вам реальный результат ваших занятий.


из Weka GUI, панель классификации - > нажмите "Дополнительные параметры..."- >Выходные прогнозы - > выберите опцию "открытый текст". Теперь щелкните левой кнопкой мыши на " открытый текст "и превратите" outputDistribution "в"True".

обратите внимание, что этот процесс может быть выполнен в последних версиях WEKA, например, WEKA 3.8.0.

с уважением,
Мартин!--1-->