Wdrażanie uzupełniających naiwnych Bayesa w pythonie?

9

Problem

Próbowałem używać naiwnych bayes na oznaczonym zbiorze danych dotyczących przestępczości, ale otrzymałem naprawdę słabe wyniki (7% dokładności). Naiwne Bayes działa znacznie szybciej niż inne alogorytmy, których używałem, więc chciałem spróbować dowiedzieć się, dlaczego wynik był tak niski.

Badania

Po przeczytaniu odkryłem, że bayes Naive powinien być używany ze zbalansowanymi zestawami danych, ponieważ ma on tendencję do klas o wyższej częstotliwości. Ponieważ moje dane są niezrównoważone, chciałem spróbować skorzystać z komplementarnych naiwnych Bayesów, ponieważ są one przeznaczone do radzenia sobie z wypaczeniami danych. W artykule opisującym proces aplikacja służy do klasyfikacji tekstu, ale nie rozumiem, dlaczego technika ta nie działałaby w innych sytuacjach. Artykuł, o którym mowa, można znaleźć tutaj . Krótko mówiąc, chodzi o użycie wag opartych na sytuacjach, w których klasa się nie pojawia.

Po przeprowadzeniu badań udało mi się znaleźć implementację w Javie, ale niestety nie znam żadnej Java i po prostu nie rozumiem algorytmu wystarczająco dobrze, aby sam się zaimplementować.

Pytanie

gdzie mogę znaleźć implementację w Pythonie? Jeśli to nie istnieje, to jak powinienem sam to wdrożyć?

konik polny
źródło

Odpowiedzi:

5

Naiwni Bayes powinni być w stanie obsługiwać niezrównoważone zestawy danych. Przypomnij sobie, że formuła Bayesa jest

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

Więc P.(xy)P.(y) bierze przeora P.(y) na konto.

W twoim przypadku może się przepasujesz i potrzebujesz wygładzenia? Możesz zacząć od wygładzania +1 i sprawdź, czy to daje jakieś ulepszenia. W Pythonie, używając numpy, zaimplementowałbym wygładzanie w ten sposób:

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

Zauważ, że daje to Multinomial Naive Bayes - który dotyczy tylko danych kategorycznych.

Mogę również zasugerować następujący link: http://www.itshared.org/2015/03/naive-bayes-on-apache-flink.html . Chodzi o wdrożenie Naive Bayes na Apache Flink. Chociaż jest to Java, może da ci trochę teorii, której potrzebujesz, aby lepiej zrozumieć algorytm.

Aleksiej Grigoriew
źródło
Być może masz rację, wygląda na to, że naiwny Bayes ma tylko problem braku równowagi z klasyfikacją tekstu. Czy możesz wyjaśnić, co to jest wygładzanie?
konik polny
Rzuciłeś okiem na link? Wyjaśniono tam. Krótko mówiąc, przy szacowaniuP.(xy) czasami xnigdy nie jest widoczny podczas treningu, a wygładzanie zapewnia, że ​​nie rujnuje wydajności klasyfikatora poprzez dodanie dodatkowej liczby (w przypadku wygładzania Laplace'a lub +1) do wszystkich funkcji.
Alexey Grigorev
0

Moje wdrożenie Complement Naive Bayes w scikit-learn można znaleźć tutaj .

airalcorn2
źródło