ошибка с классификатором NaiveBayes при классификации одного экземпляра с предварительно обученной моделью

У меня есть обученный набор данных со 125 записями. Я собираюсь классифицировать новый экземпляр с помощью NaiveBayesUpdatable. но когда я запускаю naiveBayes (под Windows, используя weka 3.4), я получаю следующую ошибку:

java.lang.ArrayIndexOutOfBoundsException: 126
    at weka.estimators.DiscreteEstimator.getProbability(Unknown Source)
    at weka.classifiers.bayes.NaiveBayes.distributionForInstance(Unknown Source)
    at weka.classifiers.Classifier.classifyInstance(Unknown Source)
    at Classifier.NaiveBayes.classifyInstance(NaiveBayes.java:190)
    at Classifier.NaiveBayes.classifyWebPage(NaiveBayes.java:106)

когда я запускаю классификатор J48, он работает без проблем.

спасибо за любую помощь \ идеи.


person shohreh    schedule 27.08.2011    source источник


Ответы (2)


Я думаю, что нашел решение. я добавил запись в набор данных и снова построил классификатор. тогда я мог бы классифицировать его без проблем. но я не знаю, почему j48 не нужно иметь запись в своем наборе данных.

person shohreh    schedule 28.08.2011

Вы вызываете updateClassifier() после classifyInstance()? NaiveBayes будет обновляться только в том случае, если вы это сделаете. J48 не является обновляемым классификатором, поэтому, естественно, его необходимо перестраивать каждый раз, когда вы добавляете экземпляр. С точки зрения производительности это не имеет большого значения, потому что J48 — чрезвычайно быстрый алгоритм обучения.

В любом случае, я бы посоветовал взглянуть на другие классы, реализующие UpdateableClassifier (используйте F4 в Eclipse, чтобы получить иерархию наследования), и сравнить с ними ваши результаты. NaiveBayes хорош для очень специфических задач, а IBk (ближайший сосед) надежен во многих областях.

person Omer    schedule 29.08.2011