Java中的Weka - 如何获取IBk或KStar或LWL或

时间:2015-06-17 16:40:48

标签: java weka predict

我已经搜遍了所有的stackoverflow和谷歌搜索这些类型的预测,但没有找到IBk或KStar或LWL。我需要从这三个clasifiers中的任何一个实例预测。我在Android工作室中这样做。

我已经找到了从其他分类器中获取预测的方法:

来自Here

J48:
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]));
}

来自Here

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

来自Here

NaiveBayes:
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));

但是我无法使用它们,因为我的分类器没有相同的方法......或者我找不到方法

我的代码:

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

即使是其他分类器也可以像AdditiveRegression,Bagging,RandomCommitte和DecisionTable一样在Weka GUI中做出很好的预测,但我需要用Java预测.... :)

1 个答案:

答案 0 :(得分:0)

通过测试所有方法找到它。

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

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

意识到weka中的分类器通常使用离散数据(从min到max的相等步长)运行。我的数据并非都是离散的。 Ibk和Kstar能够使用分布式数据,这就是为什么我只能将这两个数据用于我的数据。