Подтвердить что ты не робот

Scikits learn и nltk: производительность классификатора Наивного Байеса сильно отличается

Я сравниваю два классификатора 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, по крайней мере, с моими данными. Принимая во внимание, что они могут быть (почти) одинаковыми классификаторами, разве это не странно?

4b9b3361

Ответ 1

Является ли поведение по умолчанию для весов классов одинаковым в обеих библиотеках? Разница в точности для редкого класса (-1) выглядит так, что может быть причиной...

Ответ 2

Классификатор Naive Bayes обычно означает байесовский classfier над двоичными функциями, которые считаются независимыми. Это то, что реализует NLTK Naive Bayes classifier. Соответствующий классификатор scikit BernoulliNB классификатор.

Ограничение на булевозначные функции на самом деле не требуется, это просто проще реализовать. Наивный классификатор Байеса может быть определен для (предполагаемых) независимых функций из любого параметрического распределения.

MultinomialNB для данных с целыми значениями входных функций, которые предполагается распределяться многомиллионно.

Sckit также имеет GaussianNB, что для непрерывных функций, предположительно гауссовских распределенных.