我正在使用 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代码中遗漏了一些东西..有什么想法吗?
Thanks!
您可以使用以下代码来评估 10CV 的分类器:
eval.crossValidateModel(nb, train,10,new Random(1));
你应该记住,不要使用train.Randomize
and train.Stratify(10)
在那之前。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)