Странные результаты Weka - PullRequest
2 голосов
/ 04 августа 2010

странные результаты появляются при использовании дерева 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).

Спасибо и всего наилучшего.

1 Ответ

3 голосов
/ 04 августа 2010

Маловероятно, что что-то не так с J48. Как создание классификатора, так и сама классификация являются детерминированными. Я бы порекомендовал опубликовать большую часть Вашего кода, потому что он выглядит великолепно (без ошибок).

Что касается теста «400 циклов»: этот тест должен давать одинаковые результаты каждый раз, без исключений. Две мысли:

  • Поставьте assert, который проверяет, совпадают ли значения экземпляра с модельными. Это исключило бы любую ошибку в экземпляре.

  • Работает ли классификация в многопоточном режиме? Существуют ли общие объекты данных?

...