Weka in Java - How to get predictions for IBk or KStar or LWL or

944 views Asked by At

I've searched all over stackoverflow and google for these kind predicitons but found nothing for IBk or KStar or LWL. I would need one instance predictions from any of these three clasifiers.I am doing this in Android studio.

I've found ways of getting predictions from other classifiers like these:

for J48: from Here

double[] prediction=j48.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]));
}

For Bayesnet: from Here

Evaluation eTest = new Evaluation(trainingInstance);
eTest.evaluateModelOnce(bayes_Classifier, testInstance);

For NaiveBayes: from Here

NaiveBayes naiveBayes = new NaiveBayes();
naiveBayes.buildClassifier(train);

// this does the trick  
double label = naiveBayes.classifyInstance(test.instance(0));
test.instance(0).setClassValue(label);

System.out.println(test.instance(0).stringValue(4));

but I couldn't use them because my classifiers don't have the same methods...or I can't find a way

My code:

//I skipped code till here because its too much,
//but Data is definetly inside *instances* (I checked with debuger) 

instances.setClassIndex(instances.numAttributes()-1);
//was trying the sam with KStar, LWL, AdditiveRegression, RandomCommittee)
IBk ibk = new IBk();

//I want predicitons for this instance. For the third attribute3
Instance testInst  = new DenseInstance(3);
testInst.setValue(attribute1, 3);
testInst.setValue(attribute2, 16);
testInst.setValue(attribute3, 0);

//I was hopping for some simple way like this: (but this returns nothing)
double rez =0;
String var="";
 try{
        ibk.buildClassifier(instances);
        rez = ibk.classifyInstance(testInst);
    }
        catch(Exception ex)
    {
        Log.e("Error","ex.getMessage()");
    }
 }

Log.w("GIMME RESULTS:",rez);

Even other classifiers would be okay like AdditiveRegression, Bagging, RandomCommitte and DecisionTable they make good prediction in Weka GUI, but I need predictions in Java.... :)

1

There are 1 answers

0
Marty On BEST ANSWER

found it by testing all its methods..

ibk.buildClassifier(dataSet);
rez2 = ibk.distributionForInstance(i2); //distrib

int result = (int)rez3[0];
//it goes tha same with Kstar

Came to realize that classifiers in weka normaly run with discrete data (equal steps from min to max). And my data is not all discrete. Ibk and Kstar are able to use distributed data thats why I can use only these two with my data.