Сравнение значений кросс-валидации Бернулли NB и Мультиномиального NB

Вопрос или проблема

Я тестирую многомерный наивный байесовский классификатор и бернуллиевский наивный байесовский классификатор на своем наборе данных и использую оценку кросс-валидации, чтобы лучше понять, какой из двух алгоритмов работает лучше. Это первый классификатор:

from sklearn.naive_bayes import MultinomialNB
clf_multinomial = MultinomialNB()
clf_multinomial.fit(X_train, y_train)
y_predicted = clf_multinomial.predict(X_test) 
score = clf_multinomial.score(X_test, y_test)
scores = cross_val_score(clf_multinomial, X_train, y_train, cv=5)
print(scores)
print(score)

И вот оценки:

[0.75       0.875      0.66666667 0.95833333 0.86956522]
0.8637666498061035

Это второй классификатор:

from sklearn.naive_bayes import BernoulliNB
clf_multivariate = BernoulliNB()
clf_multivariate.fit(X_train, y_train)
y_predicted = clf_multivariate.predict(X_test) 
score = clf_multivariate.score(X_test, y_test)
scores = cross_val_score(clf_multivariate, X_train, y_train, cv=5)
print(scores)
print(score)

И вот оценки:

[0.5        0.5        0.54166667 0.54166667 0.52173913]
0.5

Судя по тому, что я понял из ответа, опубликованного здесь, первый классификатор работает лучше, потому что в моем наборе данных много признаков (11k), а не только 1. Однако довольно странно, что я получил 0.5 во втором классификаторе, что является высоким значением, учитывая количество признаков. Каковы различия между классификаторами?

Разница объясняется в документации:

Как и MultinomialNB, этот классификатор подходит для дискретных данных. Разница заключается в том, что в то время как MultinomialNB работает с количествами появления, BernoulliNB предназначен для бинарных/логических признаков.

Так что дело не в количестве признаков, а в том, как интерпретируются значения признаков: многомерный может обрабатывать несколько дискретных значений, тогда как бернуллиевский работает только с бинарными переменными.

Документация также упоминает эту опцию:

binarize: float or None, default=0.0

Порог для бинаризации (отображения на логические значения) признаков образца. Если None, предполагается, что входные данные уже состоят из бинарных векторов.

Поскольку вы не указали значение для этой опции в своем коде, применяется значение по умолчанию 0.0. Это означает, что при использовании бернуллиевского все переменные преобразуются в бинарные переменные: все, что меньше или равно 0, равно 0, все, что больше, равно 1. Это объясняет, почему бернуллиевский классификатор работает с вашими данными, хотя и не так хорошо, как многомерный: вероятно, для многих признаков в ваших данных то, что значение равно нулю или нет, является хорошим индикатором для метки.

Ответ или решение

Сравнение значений перекрестной валидации для классификаторов Бернулли и мультинонал

При анализе производительности классификаторов на вашем наборе данных действительно имеет смысл сравнить результаты, полученные с помощью перекрестной валидации, чтобы понять, какой алгоритм работает лучше. Вы использовали два различных классификатора: Multinomial Naive Bayes (Мультинонал) и Bernoulli Naive Bayes (Бернулли).

Результаты

Мультинонал Naive Bayes:

  • Оценки перекрестной валидации: [0.75, 0.875, 0.66666667, 0.95833333, 0.86956522]
  • Общая точность на тестовом наборе: 0.8637666498061035

Бернулли Naive Bayes:

  • Оценки перекрестной валидации: [0.5, 0.5, 0.54166667, 0.54166667, 0.52173913]
  • Общая точность на тестовом наборе: 0.5

Анализ

Основное отличие между классификаторами состоит в том, как они обрабатывают входные данные.

  • Мультинонал Naive Bayes предназначен для работы с частотными данными, где каждая функция может принимать несколько различных значений (например, количество вхождений слов в текстах). Он подходит для задач, где важно учитывать распределение частот слов.

  • Бернулли Naive Bayes, с другой стороны, лучше подходит для работы с бинарными (дискретными) признаками. Этот классификатор ожидает, что данные содержат только два состояния (например, присутствие или отсутствие каких-либо признаков), и оценивает вероятность класса на основе бинарных векторов.

В вашем случае, если данные, используемые для Бернулли, содержат больше значений, чем просто бинарные (0 и 1), эти значения будут преобразованы в бинарный формат. Это происходит из-за параметра binarize, значение которого по умолчанию равно 0.0. То есть все значения, менее или равные нулю, будут преобразованы в 0, а все, превышающие ноль, — в 1. Это ограничение может сильно снизить эффективность Бернулли Naive Bayes, особенно если ваши данные не соответствуют его предположениям о формате.

Почему Мультинонал работает лучше

Так как в вашем наборе данных много признаков (11 тыс.), и значения этих признаков могут варьироваться, Мультинонал способен учитывать частоту появления каждого признака, что делает его более подходящим для вашего случая. Классификатор может обрабатывать разнообразие данных, учитывая их распределение, что обуславливает более высокие результаты, чем у Бернулли.

Заключение

Подводя итог, можно сказать, что выбор между Бернулли и Мультинонал Naive Bayes должен основываться на характеристиках данных, которые вы анализируете. В вашем случае, с учетом наличия большого объема и разнообразия признаков, Мультинонал Naive Bayes оказался более эффективным. Если данные имели бы бинарный характер, то, вероятно, Бернулли Naive Bayes показал бы лучшие результаты. Поэтому важно внимательно рассмотреть специфики ваших данных при выборе метода классификации.

Оцените материал
Добавить комментарий

Капча загружается...