java奇怪的weka实例结果
使用J48树时会出现奇怪的结果。我需要对包含48个特征的向量进行分类,这非常有效,但当我尝试“优化”时,我遇到了奇怪的结果
我有一个方法:
public boolean classify(double feature1, double feature2, double[] featureVec ) {
Instance toBeClassified = new Instance(2+featureVec.length);
toBeClassified.setValue(0, feature1);
toBeClassified.setValue(1, feature2);
for (int i = 2; i < f.length + 2; ++i) {
toBeClassified.setValue(i, featureVec [i - 2]);
}
toBeClassified.setDataset(dataset);
try {
double _class = tree.classifyInstance(toBeClassified);
return _class > 0;
} catch (Exception e1) {
if(Logging.active) {
logger.error(e1.getMessage(), e1.getCause());}
}
return false;
}
}
它运行得很好,我希望我做的事情是正确的。但我想删除在每次方法调用时创建的实例,所以我将实例移动到belclassified=new instance(48);线到类主体中,因此只创建一次。这也很有效,尽管事实上,我得到的结果与其他人略有不同。比方说,从400个分类中,有一个是不同的(不是说不正确)。但我看不出有什么原因。。。我希望这里有一些人在使用weka,这样我就能明白到底是怎么回事了。(是的,2+特征向量。长度为48)
谢谢和问候
# 1 楼答案
J48不太可能有什么问题。分类器的创建和分类本身都是确定性的。我建议你发布大部分代码,因为这段代码看起来很棒(不笨重)
至于你的400循环测试:这个测试每次肯定会产生相同的结果,没有例外。两个想法:
Put assert检查实例的值是否与模型的值相同。这将排除实例中的任何错误
分类是否以多线程方式运行?是否存在任何共享数据对象