Реалізація комплементарних наївних баїв у пітоні?


9

Проблема

Я намагався використовувати Naive Bayes на міченому наборі даних про злочини, але отримав дійсно погані результати (7% точність). Naive Bayes працює набагато швидше, ніж інші алогоритми, якими я користувався, тому хотів спробувати з'ясувати, чому оцінка була такою низькою.

Дослідження

Після прочитання я виявив, що Naive Bayes слід використовувати з збалансованими наборами даних, оскільки він має ухил для класів з більшою частотою. Оскільки мої дані незбалансовані, я хотів спробувати використовувати Комплементарний Наївний Бейс, оскільки він створений спеціально для боротьби з перекосами даних. У статті, що описує процес, заявка призначена для класифікації тексту, але я не розумію, чому методика не працює в інших ситуаціях. Ви можете знайти папір, про яку я посилаюся тут . Коротше кажучи, ідея полягає у використанні ваг на основі випадків, коли клас не з'являється.

Після деяких досліджень я зміг знайти реалізацію в Java, але, на жаль, я не знаю жодної Java, і я просто не розумію алгоритм достатньо добре, щоб реалізувати себе.

Питання

де я можу знайти реалізацію в python? Якщо цього не існує, як я повинен сам займатися його реалізацією?

Відповіді:


5

Наївний Бейс повинен вміти обробляти незбалансовані набори даних. Нагадаємо, що формула Байєса є

P(yx)=P(xy)P(y)P(x)P(xy)P(y)

Отже, враховує попереднє .P(xy)P(y)P(y)

У вашому випадку, можливо, ви надягаєтесь і потребуєте певного розгладження? Ви можете почати з вирівнювання +1 і побачити, чи це дає якісь поліпшення. У python, використовуючи numpy, я би реалізував згладжування таким чином:

table = # counts for each feature 
PT = (table + 1) / (table + 1).sum(axis=1, keepdims=1)

Зауважте, що це дає вам багаточленний наївний байєс - що стосується лише категоричних даних.

Я також можу запропонувати таке посилання: http://www.itshared.org/2015/03/naive-bayes-on-apache-flink.html . Йдеться про реалізацію Naive Bayes на Apache Flink. Хоча це Java, можливо, вона дасть вам якусь теорію, яку потрібно краще зрозуміти алгоритм.


Ви можете помилитися, схоже, що у наївних Байєса є лише проблема дисбалансу з класифікацією тексту. Чи можете ви пояснити, що таке згладжування?
коник

Ви переглядали посилання? Там це пояснено. Коротше кажучи, при оцінці іноді ніколи не спостерігається під час тренувань, а згладжування гарантує, що воно не погіршить ефективність класифікатора, додавши додатковий підрахунок (у випадку згладжування лапласа або +1) до всіх функцій . P(xy)x
Олексій Григорьов

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.