Różne wyniki w GUI Weka i Weka za pomocą kodu Java
Stosuję klasyfikację tekstu w Weka przy użyciu klasyfikatora NaiveBayesMultinomialText. Problem polega na tym, że gdy korzystam z GUI, aby to zrobić i przetestować te same dane pociągu (bez walidacji krzyżowej), dostaję 93% akuracji, a kiedy próbuję to zrobić za pomocą kodu java, otrzymuję 67% akuracji. Co może być nie tak?
W GUI używam następującej konfiguracji:
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
Następnie wybieram „Użyj zestawu treningowego” w „Opcjach testowych”.
Teraz w kodzie java mam:
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());
Prawdopodobnie brakuje mi czegoś w kodzie java ... Jakieś pomysły?
Dzięki!