2013-12-08 64 views
2

我在使用NaiveBayesMultinomialText分類器的Weka中應用文本分類。問題是,當我使用GUI來做和測試相同的火車數據(沒有交叉驗證)時,我得到了93%的熱情,而當我嘗試通過Java代碼做到這一點時,我獲得了67%的熱情。什麼可能是錯誤的?通過Java代碼在Weka GUI和Weka中的不同結果

在GUI中,我使用了以下配置:

Lnorm 2.0 
debug False 
lowercaseTokens True 
minWordFrequency 3.0 
norm 1.0 
normalizeDocLength False 
periodicPruning 0 
stemmer NullStemmer 
stopwords pt-br-stopwords.dat 
tokenizer NgramTokenizer (default parameters, but max ngramsize = 2) 
useStopList True 
useWordFrequencies True 

然後我選擇「測試選項」「使用訓練集」。

現在在Java代碼中,我有:

 Instances train = readArff("data/naivebayestest/corpus_treino.arff"); 
     train.setClassIndex(train.numAttributes() - 1); 
     NaiveBayesMultinomialText nb = new NaiveBayesMultinomialText(); 
     String opt = "-W -P 0 -M 5.0 -norm 1.0 -lnorm 2.0 -lowercase -stoplist -stopwords C:\\Users\\Fernando\\workspace\\GPCommentsAnalyzer\\pt-br_stopwords.dat -tokenizer \"weka.core.tokenizers.NGramTokenizer -delimiters ' \\r\\n\\t.,;:\\\'\\\"()?!\' -max 2 -min 1\" -stemmer weka.core.stemmers.NullStemmer"; 
     nb.setOptions(Utils.splitOptions(opt));            
     nb.buildClassifier(train);  

     Evaluation eval = new Evaluation(train);           
     eval.evaluateModel(nb, train); 
     System.out.println(eval.toSummaryString());           
     System.out.println(eval.toClassDetailsString());         
     System.out.println(eval.toMatrixString());  

也許我失去了我的Java代碼東西..任何想法?

謝謝!

回答

0

你可以用波紋管代碼評估您的分類與10CV:

eval.crossValidateModel(nb, train,10,new Random(1)); 

你應該記住,別,叔使用之前train.Randomizetrain.Stratify(10)