通过Java代码在Weka GUI和Weka中产生不同的结果

时间:2013-12-08 16:59:10

标签: classification weka

我正在使用NaiveBayesMultinomialText分类器在Weka中应用文本分类。问题在于,当我使用GUI进行测试并测试相同的列车数据(没有交叉验证)时,我得到93%的灵敏度,当我尝试通过java代码时,我得到67%的灵巧。什么可能是错的?

在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代码中遗漏了一些东西..有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码来评估10CV的分类器:

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

你应该记住,在此之前不要使用train.Randomizetrain.Stratify(10)