Sto confrontando due classificatori di Naive Bayes: uno from NLTK e uno from scikit-learn. Ho a che fare con un problema di classificazione multi-classe (3 classi: positivo (1), negativo (-1) e neutro (0)).scikits learn and nltk: prestazioni del classificatore Naive Bayes molto diverse
Senza eseguire alcuna selezione di funzionalità (ovvero utilizzando tutte le funzioni disponibili) e utilizzando un set di dati di formazione di 70.000 istanze (con etichetta con etichetta, con una distribuzione di istanza del 17% positiva, 4% negativa e 78% neutra), Formulo due classificatori, il primo è nltk.NaiveBayesClassifier e il secondo è sklearn.naive_bayes.MultinomialNB (con fit_prior=True
).
Dopo l'allenamento, ho valutato i classificatori sulla mia prova set di 30.000 casi e ottengo i seguenti risultati:
**NLTK's NaiveBayes**
accuracy: 0.568740
class: 1
precision: 0.331229
recall: 0.331565
F-Measure: 0.331355
class: -1
precision: 0.079253
recall: 0.446331
F-Measure: 0.134596
class: 0
precision: 0.849842
recall: 0.628126
F-Measure: 0.722347
**Scikit's MultinomialNB (with fit_prior=True)**
accuracy: 0.834670
class: 1
precision: 0.400247
recall: 0.125359
F-Measure: 0.190917
class: -1
precision: 0.330836
recall: 0.012441
F-Measure: 0.023939
class: 0
precision: 0.852997
recall: 0.973406
F-Measure: 0.909191
**Scikit's MultinomialNB (with fit_prior=False)**
accuracy: 0.834680
class: 1
precision: 0.400380
recall: 0.125361
F-Measure: 0.190934
class: -1
precision: 0.330836
recall: 0.012441
F-Measure: 0.023939
class: 0
precision: 0.852998
recall: 0.973418
F-Measure: 0.909197
ho notato che mentre classificatore di Scikit ha una migliore precisione complessiva e precisione, il suo richiamo molto è basso rispetto a quello NLTK, almeno con i miei dati. Tenendo conto che potrebbero essere (quasi) gli stessi classificatori, non è strano?
Quali sono le funzionalità? Hai provato anche un 'BernoulliNB'? Questo dovrebbe essere più vicino al NaTto Bayes della NLTK. –
Grazie per la risposta. Le funzionalità sono parole con valore 1 se esistono nel documento (booleano). I risultati per scikits BernoulliNB sono molto vicino a MultinomialNB: 'precisione: 0,834,68 mila classe: 1 \t precisione: 0,400,38 mila \t richiamo: 0,125,361 mila \t F-Measure: 0,190,934 mila classe: -1 \t precisione: 0,330,836 mila \t richiamo: 0.012441 \t F-Measure: 0,023,939 mila classe: 0 \t precisione: 0,852,998 mila \t richiamo: 0,973,418 mila \t F-Measure: 0.909197' –
l'unica cosa che posso vedere nella documentat A quanto pare, il classificatore NB NLTK non sembra lisciare. Non mi aspetto che ciò causi una grande differenza, però ... –