ML Atlas

03 · Nadzorowane · 4 min czytania · Interaktywne · aktualizacja

Jak działa naiwny klasyfikator Bayesa i dlaczego działa, choć jest naiwny?

W skrócie

Naiwny Bayes liczy prawdopodobieństwo klasy z twierdzenia Bayesa, zakładając niezależność cech. Klasyfikuje nieźle, ale jego pewność bywa mocno zawyżona.

Co to jest

Naiwny klasyfikator Bayesa to model, który wybiera klasę o największym prawdopodobieństwie a posteriori, liczonym z twierdzenia Bayesa, przy upraszczającym założeniu, że wszystkie cechy są od siebie niezależne w obrębie każdej klasy. Dzięki temu założeniu zamiast modelować skomplikowany łączny rozkład cech wystarczy oszacować rozkład każdej cechy osobno.

Wzór jest krótki: P(klasa | x₁, …, xₚ) ∝ P(klasa) · P(x₁ | klasa) · P(x₂ | klasa) · … · P(xₚ | klasa). Pierwszy czynnik to częstość klasy, kolejne — jak typowa jest dana wartość cechy dla tej klasy. Wygrywa klasa z największym iloczynem.

Intuicja z filtru spamu: słowo „przelew” pojawia się w 30% spamu i w 2% zwykłych maili, słowo „spotkanie” odwrotnie. Naiwny Bayes mnoży takie ilorazy dla wszystkich słów wiadomości, jakby każde słowo było osobnym, niezależnym świadkiem. To właśnie naiwność — słowa w tekście oczywiście nie są niezależne.

Mechanizm — dlaczego tak działa

Bez założenia niezależności trzeba by oszacować prawdopodobieństwo każdej kombinacji wartości cech. Przy 30 cechach binarnych to ponad miliard kombinacji na klasę — żaden zbiór danych tego nie pokryje. Niezależność redukuje problem do 30 osobnych, małych oszacowań. Model uczy się więc błyskawicznie (jedno przejście po danych, liczenie częstości lub średnich i wariancji) i potrzebuje niewielu przykładów.

Warianty różnią się założonym rozkładem cech: wariant gaussowski przyjmuje rozkład normalny dla cech ciągłych, wielomianowy liczy wystąpienia słów, Bernoulliego — obecność lub brak słowa. W wariantach zliczeniowych stosuje się wygładzanie Laplace’a (dodanie małej stałej do każdej liczby), bo jedno słowo niewidziane w treningu dałoby zerowe prawdopodobieństwo i wyzerowało cały iloczyn.

Dlaczego model działa, skoro założenie jest prawie zawsze fałszywe? Do klasyfikacji nie potrzeba trafnych prawdopodobieństw, wystarczy poprawna kolejność klas. Domingos i Pazzani (1997) pokazali, że naiwny Bayes może być optymalny w sensie liczby błędów nawet przy silnych zależnościach między cechami — o ile zniekształcenia przesuwają wszystkie klasy w podobną stronę.

Cena naiwności płaci się w prawdopodobieństwach. Jeśli dwie cechy niosą tę samą informację (np. promień i obwód guza), model liczy ten sam dowód dwa razy, a przy dziesięciu skorelowanych cechach — dziesięć razy. Iloczyny szybko uciekają do skrajności i model jest pewny siebie prawie zawsze, także wtedy, gdy się myli. Jest też ścisły związek z regresją logistyczną: oba modele dają liniową granicę (dla wariantu gaussowskiego ze wspólną wariancją), ale naiwny Bayes ustala wagi z osobnych rozkładów cech, a regresja logistyczna dobiera je wprost pod klasyfikację. Przy małych danych często wygrywa Bayes, przy dużych — regresja logistyczna.

Na przykładzie

Breast Cancer Wisconsin: 569 guzów, 30 cech jąder komórkowych, z czego wiele mierzy niemal to samo — korelacja promienia z obwodem wynosi 0,998, a 21 par cech ma korelację powyżej 0,9. Trening na 426 guzach, test na 143 (podział warstwowy, random_state=0). Gaussowski naiwny Bayes trafia w 92,3% przypadków (AUC 0,976), regresja logistyczna w 95,8% (AUC 0,995). W 5-krotnej walidacji krzyżowej: 93,9% wobec 97,9%. Klasyfikacja jest więc przyzwoita, choć założenie niezależności jest tu rażąco złamane.

Gorzej z pewnością siebie. Aż 95,1% przewidywań naiwnego Bayesa to prawdopodobieństwa poniżej 0,01 lub powyżej 0,99 (dla regresji logistycznej 69,9%). Z 11 pomyłek na teście 7 model popełnił z pewnością co najmniej 99%. Entropia krzyżowa, która karze pewne siebie błędy, wynosi 1,22 dla Bayesa i 0,086 dla regresji logistycznej — czternaście razy mniej.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: naiwny Bayes z rozkładami Gaussa na dwóch cechach irysów: na płatkach trafia w 97,1% kwiatów treningowych i 93,3% testowych, a sonda przesuwana od setosy do virginiki pokazuje, jak iloczyn prior × gęstości zamienia się w prawdopodobieństwa gatunków.

Dane: Breast Cancer Wisconsin (diagnostyka raka piersi)

W praktyce

  • GaussianNB dla cech ciągłych, MultinomialNB dla zliczeń słów (z CountVectorizer lub TfidfVectorizer), BernoulliNB dla cech binarnych, ComplementNB dla niezbalansowanego tekstu.
  • Wygładzanie w wariantach zliczeniowych: parametr alpha (domyślnie 1,0, czyli wygładzanie Laplace’a); warto go stroić.
  • Nie ufaj predict_proba bez kalibracji: CalibratedClassifierCV(GaussianNB(), method="isotonic") lub "sigmoid".
  • Świetny punkt odniesienia dla klasyfikacji tekstu: trening w ułamku sekundy, wynik często blisko modeli dużo droższych.
  • Usuń zduplikowane i silnie skorelowane cechy — naiwny Bayes liczy każdą z nich jako osobny dowód.

Najczęstsze pytania

Dlaczego „naiwny”?
Bo zakłada, że cechy są niezależne w obrębie klasy, co w realnych danych prawie nigdy nie jest prawdą. Słowa w tekście, objawy choroby czy pomiary guza są ze sobą powiązane. Nazwa podkreśla, że to świadome uproszczenie, a nie opis świata.
Czy naiwny Bayes ma coś wspólnego ze statystyką bayesowską?
Niewiele poza nazwą twierdzenia. Używa wzoru Bayesa do odwrócenia warunku, ale parametry zwykle szacuje się zwykłymi częstościami, bez rozkładów a priori na parametry. To klasyfikator generatywny, nie przykład pełnego wnioskowania bayesowskiego.
Kiedy naiwny Bayes jest dobrym wyborem?
Przy klasyfikacji tekstu, gdy cech jest bardzo dużo, a przykładów mało, przy potrzebie bardzo szybkiego treningu i jako pierwszy punkt odniesienia. Słabym wyborem jest wtedy, gdy potrzebujesz wiarygodnych prawdopodobieństw albo cechy są silnie zależne i masz dużo danych.

Źródła

  • Domingos P., Pazzani M. „On the Optimality of the Simple Bayesian Classifier under Zero-One Loss”, Machine Learning 29, 1997.
  • Hand D. J., Yu K. „Idiot’s Bayes — Not So Stupid After All?”, International Statistical Review 69(3), 2001.
  • Niculescu-Mizil A., Caruana R. „Predicting Good Probabilities with Supervised Learning”, ICML 2005.
  • James G., Witten D., Hastie T., Tibshirani R. „An Introduction to Statistical Learning”, 2nd ed., 2021, rozdz. 4.4.4.
  • Dokumentacja scikit-learn, „Naive Bayes”: https://scikit-learn.org/stable/modules/naive_bayes.html

Zobacz też