Kashif Khan Kashif Khan - 4 months ago 17
Java Question

How to get predication value for an instance in weka?

I am working on Weka and need to output the predication values (probabilities) of each labels for each test instance.

In GUI there is an option in classify tab as (classify -> options -> Output predicted value) which does this work by outputting the prediction probabilities for each label but how to do this in java code. I want to receive probability scores for each label after classifying it ?


The following code takes in a set of training instances, and outputs the predicted probability for a specific instance.

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(); 

        //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 "+
                               " : "+Double.toString(prediction[i]));



The method "distributionForInstance" only works for classifiers capable of outputting distribution predictions. You can read up on it here.