10

I am developing a prediction model using Java Weka api. I can predict class for the new instance using the following code:

double predictClass = classifer.classifyInstance(instance)

However, I need class probability instead of class value. Thanks in advance for your support.

Howa Begum
  • 348
  • 1
  • 6

2 Answers2

9

Welcome to the community! You can replace your code by the following code.

double[] prediction=classifier.distributionForInstance(instance);

    for (int k<prediction.length; k++){
    System.out.println("Probability of class "+
      trains.classAttribute().value(k)+
       " : "+Double.toString(prediction[k]));
      }

This loop prints all the four values.
Hope it will help you.

Reja
  • 898
  • 1
  • 9
  • 21
  • 1
    Thanks for your quick response. But, I do not understand what classifier.distributionForInstance(instance) return exactly – Howa Begum Nov 06 '18 at 00:57
  • 1
    @HowaBegum you can see the return value by printing content of variable prediction. It will return four values such as class o, prediction probability, class 1, prediction probability. Hope you understand – Reja Nov 06 '18 at 01:05
  • 1
    Thanks again for your help. It really help me a lot. – Howa Begum Nov 06 '18 at 01:16
  • 1
    I am glad it helped. – Reja Dec 04 '18 at 01:03
1

It is work good, thanks a lot.There are some correction:

    //Dont forget create new Instance for prediction.
    DenseInstance newinstance = new DenseInstance(2);
    double[] prediction=classifier.distributionForInstance(newinstance);
    //Some correction in for 
        for (int k =0; k<prediction.length; k++){
            System.out.println("Probability of class "+
                    newinstance.classAttribute().value(k)+
                    " : "+Double.toString(prediction[k]));
        }
Alex Titov
  • 11
  • 1
  • 2