我正在使用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代码中遗漏了一些东西..有什么想法吗?
谢谢!
答案 0 :(得分:1)
您可以使用以下代码来评估10CV的分类器:
eval.crossValidateModel(nb, train,10,new Random(1));
你应该记住,在此之前不要使用train.Randomize
和train.Stratify(10)
。