2

使用 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 移至 BeClassified = new Instance(48); 进入类主体 - 所以它只创建一次。这也很有效,尽管我得到的结果与其他结果略有不同。可以说,从 400 个分类中,有一个是不同的(不是说,不正确)。但是我看不出这是什么原因……我希望这里有一些人在使用 weka,以便我了解发生了什么/错误。(是的,2+featureVec.length 是 48)。

谢谢并恭祝安康。

4

1 回答 1

3

J48 不太可能出现任何问题。分类器的创建和分类本身都是确定性的。我建议发布您的代码的更大部分,因为这个看起来很棒(没有错误)。

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

  • 放置断言检查实例的值是否与模型一相同。这将排除实例中的任何错误。

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

于 2010-08-04T19:21:08.227 回答