Zasada Bayesa w odwrotnej kolejności
Klasyfikacja pyta: przy danym punkcie cech, jaka klasa jest najbardziej prawdopodobna? Zasada Bayesa odwraca to pytanie i czyni je często łatwiejszym do odpowiedzi bezpośrednio - przy danej klasie, jakie jest prawdopodobieństwo wystąpienia tych cech? - i łączy to z tym, jak powszechne każda klasa jest w ogóle. Dla punktu x i klasy c, prawdopodobieństwo a posteriori jest proporcjonalne do prawdopodobieństwa a priori klasy pomnożone przez prawdopodobieństwo wystąpienia x pod tą klasą: P(c | x) jest proporcyjne do P(c) razy P(x | c). Aby sklasyfikować nowy punkt, oblicz tę wartość dla każdej klasy i wybierz największą.
Gdzie pojawia się naiwność
Przy wielu cechach, P(x podane c) oznacza łączną prawdopodobieństwo wszystkich cech razem, co w ogólnym przypadku wymaga modelowania, jak cechy korelują ze sobą – to kosztowne i wymagające dużych zbiorów danych. Założenie naiwne całkowicie o tym pomija: traktuje każdą cechę jako warunkowo niezależną podane klasę, więc łączne prawdopodobiebie rozkłada się na prosty iloczyn jednowymiarowych prawdopodobiebieństw, jedno dla każdej cechy. To założenie jest prawie zawsze technicznie fałszywe, ale naiwny Bayes pozostaje silnym i szybkim punktem wyjścia, ponieważ klasyfikacja potrzebuje tylko największej posteriory, aby być prawidłową – ranking w miarę klas nie ulega zmianie nawet wtedy, gdy same prawdopodobieństwa by się zmieniły.
Wersja Gaussa
Dla zmiennych ciągłych modele naiwnego bayesowskiego Gaussiana traktują każdy element w każdej klasie jako rozkład normalny, szacowany bezpośrednio z danych treningowych: średnią i odchylenie standardowe tej zmiennej wśród punktów oznaczonych daną klasą, nic więcej. Trening polega więc wyłącznie na obliczeniach arytmetycznych - przejściu przez dane w celu uzyskania średnich i odchyleń standardowych dla każdej klasy i cechy, bez jakiejkolwiek optymalizacji iteracyjnej.
function gaussianLikelihood(x, mean, variance) {
const exponent = -((x - mean) ** 2) / (2 * variance);
return Math.exp(exponent) / Math.sqrt(2 * Math.PI * variance);
}
function classify(point, classes) {
let best = null, bestScore = -Infinity;
for (const c of classes) {
let logScore = Math.log(c.prior);
for (let d = 0; d < point.length; d++)
logScore += Math.log(gaussianLikelihood(point[d], c.mean[d], c.variance[d]));
if (logScore > bestScore) { bestScore = logScore; best = c; }
}
return best;
}
Kształt granicy decyzyjnej
Granica między dwiema klasami to punkt, w którym ich posterioře są równe. Logowanie przekształca rozkłady Gaussa w kwadratowe wyrażenia względem x, więc ogólnie rzecz biorąc, gdy klasy mają różne wariancje, granica jest krzywą – parabolą, elipsą lub hiperbolą, w zależności od względnych wariancji. Jeśli dwie klasy przypadkiem mają tę samą wariancję w każdym wymiarze, kwadratowe wyrażenia znikają i granica sprowadza się do prostej linii, co tłumaczy, dlaczego Gaussa naiwnego klasyfikatora często mylą z czysto liniowym klasyfikatorem – jest liniowy tylko w tym specjalnym, symetrycznym przypadku.
Frequently asked questions
Dlaczego nazywa się to naiwnym?
Ponieważ zakłada, że każda cecha jest warunkowo niezależna od każdej innej cechy podaną klasą – uproszczenie, które rzadko kiedy jest w pełni prawdziwe. Współrzędne x i y punktu zwykle są skorelowane wewnątrz rzeczywistej klastra, ale klasyfikator mnoży ich indywidualne prawdopodobieństwa, jakby nie były ze sobą powiązane, a w praktyce to rzadko wpływa na ostateczne klasyfikowanie.
Czy granica decyzyjna zawsze jest linią prostą?
Tylko wtedy, gdy każda klasa ma tę samą wariancję w każdej cechze. W tym wyjątkowym przypadku wyrażenia kwadratowe w log-posteriorach znikają i granica jest liniowa. Gdy klasy mają różne wariancje, co jest ogólnym przypadkiem, granica jest krzywą – zwykle parabolą, elipsą lub hiperbolą.
Jak naiwny Bayes radzi sobie z klasą, której nigdy nie widział wartości cechy?
Dla cech gaussowskich to rzadko jest trudny problem, ponieważ gęstość gaussowska nigdy nie jest dokładnie zerowa, tylko bardzo mała w odległości od średniej. Dla cech dyskretnych, takich jak liczby słów w klasyfikacji tekstu, prawdziwie niewidoczna wartość pomnożyłaby cały iloczyn przez zero, więc implementacje dodają wygładzanie Laplace’a – małą stałą dodawaną do każdej liczby, aby żadne prawdopodobieństwo nigdy nie było dokładnie zerowe.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Naive Bayes Classifier i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Naive Bayes Classifier