奇怪的weka实例结果

时间:2010-08-04 19:00:37

标签: 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;
    }
}

效果很好,我希望我做得对。但我想删除在每次方法调用时完成的实例创建,因此我将Instance toBeClassified = new Instance(48);进入类体 - 所以它只创建一次。这也很有效,尽管事实上,我得到的结果与其他结果略有不同。比方说,从400个分类中,一个是不同的(不是说,不正确)。但是我没有看到这个的原因...我希望这里有一些人使用weka,所以我理解发生了什么/错了。 (是的,2 + featureVec.length是48)。

谢谢和问候。

1 个答案:

答案 0 :(得分:3)

J48出现问题的可能性很小。分类器创建和分类本身都是确定性的。我建议发布你的代码的更大部分,因为这个看起来很棒(unbuggy)。

至于你的400循环测试:这个肯定应该每次产生相同的结果,没有例外。两个想法:

  • 设置assert,检查实例的值是否与模型1相同。这将排除实例中的任何错误。

  • 分类是否以多线程方式运行?是否有共享数据对象?