3.3 Naiver Bayes-Klassifikator
Die vereinfachende Annahme
Das Problem des Bayes-Klassifikators ist die Schätzung der -dimensionalen Likelihood . Der naive Bayes-Klassifikator (Naive Bayes) macht eine radikale Vereinfachung 📄 06_bayes.pdf, Folie 17:
Die klassenbedingte Wahrscheinlichkeit (Likelihood) faktorisiert für die einzelnen Merkmale im Merkmalsvektor . Das heißt: Bei gegebener Klasse sind die voneinander statistisch unabhängig.
Damit wird aus einer -dimensionalen Dichteschätzung eine Sammlung von eindimensionalen Dichteschätzungen pro Klasse. Die Bayessche Entscheidungsregel wird zu:
Entscheide für , wenn
sonst für . (Bei mehr Klassen: .)
Naive Bayes nimmt bedingte Unabhängigkeit (conditional independence) an, also Unabhängigkeit innerhalb jeder Klasse. Die Merkmale dürfen über alle Daten hinweg durchaus korreliert sein. Beispiel: Größe und Gewicht von Fischen sind insgesamt korreliert, schon weil Wolfsbarsche größer und schwerer sind als Lachse. Naive Bayes nimmt nur an, dass unter den Lachsen Größe und Gewicht nichts miteinander zu tun haben, was in Wirklichkeit natürlich auch nicht stimmt. Daher „naiv“.
Warum „naiv“, und warum trotzdem? Die Annahme ist fast nie exakt erfüllt. Für die Klassifikation kommt es aber nur darauf an, welche Klasse den größten Wert bekommt, nicht darauf, dass die geschätzten Wahrscheinlichkeiten stimmen. Die Rangfolge bleibt oft richtig, auch wenn die Zahlen verzerrt sind (siehe Eigenschaften).
Rechenbeispiel: diskreter Spamfilter
Ergänzung, nicht auf den Folien: Ein Spamfilter mit zwei binären Merkmalen: = „Mail enthält ‚Gewinn‘“, = „Mail enthält ‚Meeting‘“. Trainingsdaten: 10 Mails, davon 4 Spam () und 6 Ham (, erwünscht).
| Anzahl | „Gewinn“ kommt vor | „Meeting“ kommt vor | |
|---|---|---|---|
| Spam | 4 | 3 | 1 |
| Ham | 6 | 1 | 4 |
Training (relative Häufigkeiten):
- Priors: , .
- Likelihoods: , , , .
Neue Mail: enthält „Gewinn“, aber nicht „Meeting“, also . Für braucht man die Gegenwahrscheinlichkeit .
, also Spam. Wenn man die Posterior-Wahrscheinlichkeit wissen will, normiert man: .
Käme in den Ham-Mails „Gewinn“ nie vor, wäre , und das ganze Produkt für Ham wäre 0, egal wie stark alle anderen Merkmale für Ham sprechen. Ein einziges ungesehenes Wort entscheidet dann alles.
Ergänzung: Abhilfe ist die Laplace-Glättung (Laplace / additive smoothing): Man addiert zu jeder Zählung eine Pseudo-Zählung, z. B. bei binären Merkmalen.
Ergänzung: Bei vielen Merkmalen (Tausende Wörter) wird das Produkt vieler kleiner Zahlen numerisch 0 (Underflow). Man vergleicht deshalb die Log-Posteriors: . Da der Logarithmus monoton ist, ändert sich die Entscheidung nicht, und aus dem Produkt wird eine Summe.
Gaussian Naive Bayes
Für kontinuierliche Merkmale nimmt man für die einzelnen Likelihoods oft eine Gaußverteilung an. Das heißt dann Gaussian Naive Bayes (GNB) 📄 06_bayes.pdf, Folie 17.
Modell und Training
Beim GNB nimmt man für jedes Merkmal und jede Klasse eine Gaußverteilung an 📄 06_bayes.pdf, Folie 18. (Achtung: Auf Folie 18 ist der Index vertauscht, läuft über die Merkmale, über die Klassen.)
Training heißt hier nur: Mittelwert und Standardabweichung für jede Kombination aus Merkmal und Klasse aus den Trainingsdaten schätzen (Merkmal des Trainingsbeispiels ):
Dabei ist die Anzahl der Trainingsbeispiele in Klasse , und die Summen laufen nur über die Beispiele dieser Klasse. Der Faktor macht die Varianzschätzung erwartungstreu (siehe Stichprobenvarianz in Kapitel 1).
Die A-priori-Wahrscheinlichkeiten ergeben sich aus den relativen Häufigkeiten der Klassen im Trainingsdatensatz ( = Gesamtzahl der Trainingsbeispiele):
Diese Schätzung ist nur sinnvoll, wenn die Klassenverteilung im Trainingsset der im Einsatz entspricht. Wurde der Datensatz künstlich balanciert (z. B. 50 % Betrugsfälle, obwohl in Wirklichkeit 0,1 %), sind die so geschätzten Priors falsch und der Klassifikator schlägt viel zu oft „Betrug“ vor.
Rechenbeispiel: GNB von Hand
Ergänzung, nicht auf den Folien: Zwei Merkmale, je drei Trainingspunkte pro Klasse:
| Klasse | Trainingspunkte | ||||
|---|---|---|---|---|---|
| 2 | 6 | 1 | 1 | ||
| 7 | 3 | 1 | 1 |
Varianz z. B. für in : Abweichungen , Quadratsumme 2, geteilt durch ergibt 1. Priors: .
Neuer Punkt . Mit ist jeder Faktor mit :
| für | für | Produkt | |||
|---|---|---|---|---|---|
| 0,0540 | 0,0540 | 0,00292 | |||
| 0,00443 | 0,2420 | 0,00107 |
Die Priors sind gleich, also gewinnt . Posterior: .
Mit Logarithmen geht es eleganter: Die Konstanten sind für beide Klassen gleich, es bleibt der Vergleich von , also gegen . Differenz 1, also Quotient und Posterior .
Dasselbe in NumPy:
import numpy as np
X = np.array([[1, 5], [2, 6], [3, 7], [6, 2], [7, 3], [8, 4]], float)
y = np.array([0, 0, 0, 1, 1, 1])
x = np.array([4.0, 4.0])
mu = np.array([X[y == k].mean(axis=0) for k in (0, 1)])
var = np.array([X[y == k].var(axis=0, ddof=1) for k in (0, 1)])
prior = np.array([np.mean(y == k) for k in (0, 1)])
# Log-Likelihood (Summe über Merkmale) + Log-Prior
log_post = -0.5 * np.sum(np.log(2*np.pi*var) + (x - mu)**2 / var, axis=1) + np.log(prior)
post = np.exp(log_post - log_post.max()); post /= post.sum()
print(post) # [0.731 0.269]
Hinweis: sklearn.naive_bayes.GaussianNB schätzt die Varianz mit statt (plus eine kleine Glättung), liefert hier also etwas andere Wahrscheinlichkeiten (etwa 0,82 statt 0,73), aber dieselbe Entscheidung.
Beispiel: gleiche Varianzen in allen Merkmalen
Folie 19 zeigt links den 1D-Fall, rechts den 2D-Fall mit zwei Gaußverteilungen gleicher (kugelförmiger) Varianz und gleichen Priors 📄 06_bayes.pdf, Folie 19. Die Entscheidungsgrenze liegt in 1D genau in der Mitte zwischen den Mittelwerten, in 2D ist sie eine Gerade.
Gleiche A-priori-Wahrscheinlichkeit in allen Klassen führt auf einen linearen Klassifikator (Trennfläche bestimmt sich aus dem kleinsten Abstand zum Klassenmittelwert).
Herleitung (Ergänzung): Alle gleich. Dann ist der Log-Posterior bis auf Konstanten, die für alle Klassen gleich sind,
Bei gleichen Priors fällt weg, und man wählt die Klasse mit dem kleinsten euklidischen Abstand zum Klassenmittelwert (nearest mean classifier). Warum ist die Grenze linear? Ausmultipliziert ist
Der quadratische Term ist für beide Klassen gleich und fällt beim Vergleich weg. Übrig bleibt eine in lineare Gleichung:
Das ist die Mittelsenkrechte der Verbindungsstrecke zwischen und . Im Rechenbeispiel oben: Abstandsquadrat von zu ist , zu ist , also , wie berechnet.
Sind die Priors ungleich, bleibt die Grenze eine Gerade, verschiebt sich aber parallel weg von der wahrscheinlicheren Klasse (deren Region wird größer).
Folie 19 nennt als Bedingung „gleiche A-priori-Wahrscheinlichkeit“. Für die Linearität entscheidend sind aber die gleichen Varianzen (Überschrift der Folie): Haben die Klassen unterschiedliche Varianzen , bleiben quadratische Terme stehen und die Grenze ist gekrümmt. Gleiche Priors sorgen zusätzlich dafür, dass die Grenze genau die Mittelsenkrechte ist (nächster Mittelwert).
Eigenschaften des naiven Bayes-Klassifikators
Folie 20 fasst zusammen 📄 06_bayes.pdf, Folie 20:
- Funktioniert erstaunlich gut: Trotz der stark vereinfachenden Annahmen ist Naive Bayes in einigen Anwendungen sehr erfolgreich, z. B. bei der Dokumentenklassifikation, bei Gehirnscans und als Spamfilter.
- Theoretische Begründung: Man kann zeigen, dass die Nachteile der Unabhängigkeitsannahme bei vielen real vorkommenden Verteilungen nicht sehr ins Gewicht fallen (H. Zhang, The Optimality of Naive Bayes, Proc. FLAIRS, 2004). Grob gesagt: Abhängigkeiten zwischen Merkmalen heben sich über die Klassen hinweg oft gegenseitig auf.
- Wenig Parameter, wenig Daten: Bei -dimensionalen Daten und zwei Klassen sind nur Parameter zu schätzen ( und für Merkmale und 2 Klassen). Das braucht relativ wenig Trainingsdaten.
- Schnelles Training: Ein Durchlauf über die Daten genügt (Mittelwerte und Varianzen summieren), also in der Anzahl der Trainingsbeispiele .
- Varianten je nach Art der Daten:
| Variante | Daten | Modell für |
|---|---|---|
| Gaussian Naive Bayes | kontinuierlich | Gaußverteilung |
| Bernoulli Naive Bayes | binär (Wort kommt vor / nicht) | Bernoulli-Verteilung |
| Multinomial Naive Bayes | ganzzahlig (Wortanzahlen) | Multinomialverteilung |
Das Spamfilter-Beispiel oben ist ein Bernoulli Naive Bayes.
Ergänzung: Ohne Unabhängigkeitsannahme bräuchte ein Gauß-Modell pro Klasse eine volle -Kovarianzmatrix, also etwa Parameter statt . Bei Merkmalen sind das rund 500 000 statt 1000 Varianzen pro Klasse, mit wenigen hundert Trainingsbeispielen nicht schätzbar.
Ergänzung: Sind Merkmale stark korreliert (z. B. dasselbe Wort doppelt als Merkmal), wird ihre Evidenz mehrfach gezählt. Die Entscheidung bleibt oft richtig, aber die Posterior-Werte werden zu extrem (nahe 0 oder 1). Die Zahl eines Naive-Bayes-Modells sollte man deshalb nicht wörtlich als Wahrscheinlichkeit nehmen.