Наивные байесовские классификаторы являются популярным выбором для задач классификации. Есть много причин для этого, в том числе:
- «Zeitgeist» - широко распространенная осведомленность после успеха спам-фильтров около десяти лет назад
- Легко написать
- Модель классификатора быстро построить
- Модель может быть изменена с новыми данными обучения без необходимости перестраивать модель
Тем не менее, они «наивны» - то есть они предполагают, что функции независимы - это контрастирует с другими классификаторами, такими как классификаторы максимальной энтропии (которые медленно вычисляются).
Предположение о независимости обычно не может быть принято, и во многих (в большинстве случаев) случаях, включая пример спам-фильтра, оно просто неверно.
Так почему же наивный байесовский классификатор по-прежнему очень хорошо работает в таких приложениях, даже если функции не зависят друг от друга?
источник
Большинство проблем машинного обучения легко!
Смотрите, например, в блоге Джона Лэнгфорда . На самом деле он говорит, что ML облегчает проблемы, и это представляет проблему для исследователей с точки зрения того, должны ли они пытаться применять методы к широкому кругу простых проблем или атаковать более сложные проблемы. Однако побочным продуктом является то, что для многих задач данные линейно разделимы (или, по крайней мере, почти), и в этом случае любой линейный классификатор будет работать хорошо! Просто так получилось, что авторы оригинальной фильтровальной бумаги для спама решили использовать наивный байесовский метод, но если бы они использовали Перцептрон, SVM, дискриминантный анализ Фишера, логистическую регрессию, AdaBoost или почти все остальное, это, вероятно, сработало бы.
Помогает тот факт, что алгоритм относительно легко закодировать. Например, чтобы закодировать SVM, вам нужно иметь решатель QP или кодировать алгоритм SMO, который не является тривиальной задачей. Конечно, вы можете скачать libsvm, но в первые дни эта опция была недоступна. Однако есть много других простых алгоритмов (включая упомянутый выше Perceptron), которые так же легко кодировать (и допускают поэтапные обновления, как упоминается в вопросе).
Конечно, для сложных нелинейных задач необходимы методы, которые могут иметь дело с нелинейными задачами. Но даже это может быть относительно простой задачей, когда используются методы ядра . Тогда часто возникает вопрос «Как создать эффективную функцию ядра для моих данных», а не «Какой классификатор мне следует использовать».
источник
Благодаря широкому использованию наивных байесовских классификаторов в инструментах сегментации, мой опыт согласуется с опубликованными работами, показывающими, что NBC сопоставимы по точности с линейным дискриминантом и CART / CHAID, когда доступны все переменные предиктора.
(По точности как «вероятность попадания» в прогнозировании правильного решения как наиболее вероятного, так и калибровка, означающая, скажем, 75% -ную оценку членства, правильна в 70% -80% случаев.)
Мои два цента в том, что NBC работает так хорошо, потому что:
И вот, когда все переменные наблюдаются. Что делает NBC действительно отстраненным от пакета, так это то, что он грациозно ухудшается, когда одна или несколько переменных предиктора отсутствуют или не наблюдаются. CART / CHAID и линейный дискриминантный анализ в этом случае останутся без изменений.
источник