2011-08-27 31 views
0

我有一個訓練有125條記錄的數據集。我將使用NaiveBayesUpdatable對新實例進行分類。但是當我運行naiveBayes(windows下,使用WEKA 3.4),我得到 以下錯誤:使用NaiveBayes分類器分類帶有預訓練模型的一個實例時出錯

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分類,它沒有任何問題運行。

感謝您的任何幫助\想法。

回答

0

我想我找到了解決方案。我將記錄添加到數據集並再次構建分類器。那麼我可以分類它沒有問題。但我不知道爲什麼j48不需要在它的數據集中有記錄。

0

你是否在classifyInstance()之後調用updateClassifier()? NaiveBayes只會在您更新時纔會更新。 J48不是一個可更新的分類器,所以很自然地,每次添加實例時都必須重建它。從性能上看,它並沒有造成如此大的差異,因爲J48是一種非常快速的學習算法。

在任何情況下,我會建議查看其他實現UpdateableClassifier的類(在Eclipse中使用F4來獲得繼承層次結構),並將結果與​​它們進行比較。 NaiveBayes適用於非常具有特定任務,而IBk(最近鄰居)在許多域中都很健壯。