Search code examples
javaweka

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 ?


Solution

  • 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(); 
            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]));
            }
    
        }
    
    }
    

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