Ответ 1
Является ли поведение по умолчанию для весов классов одинаковым в обеих библиотеках? Разница в точности для редкого класса (-1) выглядит так, что может быть причиной...
Я сравниваю два классификатора Naive Bayes: один из NLTK и один от scikit-learn. Я имею дело с проблемой классификации нескольких классов (3 класса: положительные (1), отрицательные (-1) и нейтральные (0)).
Без выполнения какого-либо выбора функции (то есть с использованием всех доступных функций) и с использованием набора учебных материалов из 70 000 экземпляров (с помеховыми помехами, с распределением экземпляра 17% положительным, 4% отрицательным и 78% нейтральным), я подготовьте два классификатора, первый из них - nltk.NaiveBayesClassifier, а второй - sklearn.naive_bayes.MultinomialNB(с fit_prior=True
).
После обучения я оценил классификаторы в своем тестовом наборе из 30 000 экземпляров, и я получаю следующие результаты:
**NLTK 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 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 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
Я заметил, что, хотя классификатор Scikit имеет лучшую общую точность и точность, его отзыв очень низкий по сравнению с NLTK, по крайней мере, с моими данными. Принимая во внимание, что они могут быть (почти) одинаковыми классификаторами, разве это не странно?
Является ли поведение по умолчанию для весов классов одинаковым в обеих библиотеках? Разница в точности для редкого класса (-1) выглядит так, что может быть причиной...
Классификатор Naive Bayes обычно означает байесовский classfier над двоичными функциями, которые считаются независимыми. Это то, что реализует NLTK Naive Bayes classifier. Соответствующий классификатор scikit BernoulliNB классификатор.
Ограничение на булевозначные функции на самом деле не требуется, это просто проще реализовать. Наивный классификатор Байеса может быть определен для (предполагаемых) независимых функций из любого параметрического распределения.
MultinomialNB для данных с целыми значениями входных функций, которые предполагается распределяться многомиллионно.
Sckit также имеет GaussianNB, что для непрерывных функций, предположительно гауссовских распределенных.