Pytanie:
Naiwny klasyfikator Bayesa daje prawdopodobieństwo większe niż 1
mj_
2013-07-31 07:10:48 UTC
view on stackexchange narkive permalink

Próbuję zrozumieć przykład dotyczący użycia klasyfikatora Naive Bayes w filtrowaniu spamu w oparciu o ten link. W artykule wybrano dwa „złe” słowa, które według nich znajdują się często w spamie, a następnie obliczono prawdopodobieństwo, że wiadomość jest spamem na podstawie obecności tych słów. Próbowałem rozszerzyć ten przykład do trzech słów, ale otrzymuję prawdopodobieństwo większe niż jeden i nie widzę, co robię źle.

Dwusłówny:

$$ P (spam | słowo \; a, słowo \; b) = \ frac {P (spam) \ times P (słowo \; a | spam) \ times P (słowo \; b | spam)} {P ( word \; a) \ times P (word \; b)} $$

Udaję, że istnieje super złe słowo „foobar”, które występuje w 100% wiadomości spamowych . Czy formuła Naive Bayes rozwija się w ten sposób?

Wielkość trzech słów:

$$ P (spam | słowo \; a, słowo \; b, słowo \; c) = \ frac {P (spam) \ times P (słowo \; a | spam) \ times P (słowo \; b | spam) * P (słowo \; c | spam)} {P (słowo \; a) \ times P (słowo \; b) \ times P (słowo \; c)} $$

Dochodzi do mnie fakt, że w liczniku $ P (słowo \; c | spam) = 1 $ i $ P (słowo \; c) $ to pewna liczba z przedziału od 0 $ do 1 $, taka że kiedy rozwiążę całe równanie, podzielenie przez mianownik $ < 1 $ powoduje, że moja odpowiedź szybko rośnie (i przekracza 1 $). Wyolbrzymienie tego można zobaczyć w 0,9 $ / 0,000001 $.

Czy „łamię” algorytm przez to, że „foobar” pojawia się w 100% przypadków w wiadomościach spamowych?

Krótka odpowiedź brzmiałaby NIE. Jednak do debugowania problemu potrzeba więcej szczegółów implementacji.
Jeden odpowiedź:
Flounderer
2013-07-31 12:09:51 UTC
view on stackexchange narkive permalink

Nie złamiesz algorytmu mając słowo, które pojawia się w $ 100 \% $ wiadomości. Forum, którego używasz dla prawdopodobieństwa, jest błędne. W przypadku przypadku składającego się z dwóch słów, oto przykład, aby pokazać dlaczego. Załóżmy, że twoje słowa to $ a $, $ b $ i $ x $ i że masz dwie wiadomości do zbudowania klasyfikatora. Pierwsza wiadomość to spam i zawiera tekst a b . Druga wiadomość nie jest spamem i zawiera tekst x . Następnie

$$ P (\ text {spam} | \ text {słowo a, słowo b}) = 1 $$

jako jedyna wiadomość, która zawiera $ a $ i $ b $ to spam. Ale $ P (\ text {spam}) = 1/2 $, ponieważ jedna na dwie wiadomości to spam. Ponadto $ P (\ text {słowo a} | \ text {spam}) = 1 $ i $ P (\ text {słowo b} | \ text {spam}) = 1 $. Ponadto $ P (\ text {słowo a}) = 1/2 $, ponieważ jedna z dwóch wiadomości zawiera $ a $ i podobnie $ P (\ text {słowo b}) = 1/2 $. Więc prawa strona twojego wzoru to

$$ P (\ text {spam}) \ frac {P (\ text {słowo a} | \ text {spam}) P (\ text {słowo b} | \ text {spam})} {P (\ text {słowo a}) P (\ text {słowo b})} = 2, $$

co nie jest prawdopodobieństwem. Prawidłowa formuła to

$$ P (\ text {spam} | \ text {słowo a, słowo b}) = \ frac {P (\ text {spam, słowo a, słowo b})} {P (\ text {słowo a, słowo b})} = \ frac {P (\ text {słowo a, słowo b} | \ text {spam}) P (\ text {spam})} {P (\ text {słowo a, słowo b})}. $$

Naiwne założenie Bayesa jest takie, że słowa $ a $ i $ b $ pojawiają się niezależnie, biorąc pod uwagę, że wiadomość jest spamem (a także biorąc pod uwagę, wiadomość nie jest spamem). Tak się składa, że ​​w tym przykładzie jest to prawda, a ideą naiwnego klasyfikatora Bayesa jest założenie, że to prawda, w którym to przypadku formuła staje się

$$ \ frac {P (\ text {word a} | \ text {spam}) P (\ text {słowo b} | \ text {spam}) P (\ text {spam})} {P (\ text {słowo a, słowo b})}. $$

Twoim błędem było założenie, że mianownik również stanie się $ P (\ text {słowo a}) P (\ text {słowo b}) $, ale to nieprawda, ponieważ $ a $ i $ b $ nie są niezależne; są niezależne tylko pod warunkiem, że wiesz, czy wiadomość jest spamem, czy nie . Możesz zobaczyć, że nie są one niezależne, pytając: „Przypuśćmy, że wiem, że wiadomość zawiera $ a $. Czy to mówi mi coś nowego o tym, czy zawiera $ b $?” Odpowiedź brzmi z pewnością tak, ponieważ jedyna wiadomość, która zawiera $ a $, zawiera również $ b $. (Koniec przykładu.)

Zamieszanie powstaje, ponieważ ludzie zwykle nie zawracają sobie głowy zapisywaniem mianownika w naiwnej formule Bayesa, ponieważ nie wpływa on na obliczenia, z wyjątkiem współczynnika skalowania, który jest taki sam spamu, a nie spamu. Często zobaczysz zapisany wzór

$$ P (\ text {spam} | \ text {słowo a, słowo b}) \ propto P (\ text {spam}) P (\ text {słowo a} | \ text {spam}) P (\ text {słowo b} | \ text {spam}) $$ gdzie stała proporcjonalności to $ \ frac {1} {P (\ text {słowo a, słowo b})} $. Ale możesz zignorować tę stałą podczas klasyfikowania nowej wiadomości. Po prostu obliczyłbyś prawą stronę

$$ P (\ text {spam}) P (\ text {słowo a} | \ text {spam}) P (\ text {słowo b} | \ tekst {spam}) $$ i $$ P (\ text {nie spam}) P (\ text {słowo a} | \ text {nie spam}) P (\ text {słowo b} | \ text {nie spam} ) $$, a następnie sklasyfikuj jako spam lub nie, w zależności od tego, który z nich jest większy.

Czy masz odniesienie do tego roszczenia: „ponieważ i nie są niezależne; są niezależne tylko pod warunkiem, że wiesz, czy wiadomość jest spamem, czy nie” Zawsze widziałem założenie Naiwne, że _a_ i _b_ są niezależne, kropka.
Ponadto Twoja wersja założenia o niezależności oznacza, że współczynnik skalowania można wyrazić jako P (spam) P (słowo a | spam) P (słowo b | spam) + P (nie spam) P (słowo a | nie spam) P(słowo b | nie spam), które jest równe sumie dwóch liczników, gwarantując w ten sposób, że suma pełnych prawdopodobieństw wyniesie 1.
Ach, nawet artykuł Wikipedii na temat naiwnych bayesów (https://en.wikipedia.org/wiki/Naive_Bayes_classifier) wspomina, że założenie o niezależności zależy od klasy. Po prostu nigdy nie zauważyłem tej części: „załóżmy, że wszystkie cechy w Xsą wzajemnie niezależne, zależne od kategorii C_k "


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...