Java 中的 Weka - 如何获得 IBk 或 KStar 或 LWL 或的预测
Weka in Java - How to get predictions for IBk or KStar or LWL or
我在整个 Whosebug 和 google 中搜索了这些类型的预测,但没有找到任何关于 IBk 或 KStar 或 LWL 的信息。我需要来自这三个 clasifiers.I 中任何一个的实例预测,我正在 Android 工作室中执行此操作。
我找到了从其他分类器中获取预测的方法,例如:
对于 J48: 来自 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]));
}
对于 贝叶斯网: 来自 Here
Evaluation eTest = new Evaluation(trainingInstance);
eTest.evaluateModelOnce(bayes_Classifier, testInstance);
对于 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 中进行预测... :)
通过测试其所有方法找到它..
ibk.buildClassifier(dataSet);
rez2 = ibk.distributionForInstance(i2); //distrib
int result = (int)rez3[0];
//it goes tha same with Kstar
开始意识到 weka 中的分类器通常 运行 具有离散数据(从最小到最大的步长相等)。而且我的数据并非都是离散的。 Ibk 和 Kstar 能够使用分布式数据,这就是为什么我只能将这两个用于我的数据。
我在整个 Whosebug 和 google 中搜索了这些类型的预测,但没有找到任何关于 IBk 或 KStar 或 LWL 的信息。我需要来自这三个 clasifiers.I 中任何一个的实例预测,我正在 Android 工作室中执行此操作。
我找到了从其他分类器中获取预测的方法,例如:
对于 J48: 来自 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]));
}
对于 贝叶斯网: 来自 Here
Evaluation eTest = new Evaluation(trainingInstance);
eTest.evaluateModelOnce(bayes_Classifier, testInstance);
对于 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 中进行预测... :)
通过测试其所有方法找到它..
ibk.buildClassifier(dataSet);
rez2 = ibk.distributionForInstance(i2); //distrib
int result = (int)rez3[0];
//it goes tha same with Kstar
开始意识到 weka 中的分类器通常 运行 具有离散数据(从最小到最大的步长相等)。而且我的数据并非都是离散的。 Ibk 和 Kstar 能够使用分布式数据,这就是为什么我只能将这两个用于我的数据。