通过 Java 代码在 Weka GUI 和 Weka 中得到不同的结果
Posted
技术标签:
【中文标题】通过 Java 代码在 Weka GUI 和 Weka 中得到不同的结果【英文标题】:Different results in Weka GUI and Weka via Java code 【发布时间】:2013-12-25 16:57:30 【问题描述】:我正在使用 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】:您可以使用下面的代码来使用 10CV 评估您的分类器:
eval.crossValidateModel(nb, train,10,new Random(1));
您应该记住,在此之前不要使用train.Randomize
和train.Stratify(10)
。
【讨论】:
以上是关于通过 Java 代码在 Weka GUI 和 Weka 中得到不同的结果的主要内容,如果未能解决你的问题,请参考以下文章
通过 python api 在 Weka GUI 和 Weka 中得到不同的结果