Naive Bayes
Naive-Bayes-Klassifikatoren wenden den Satz von Bayes an und nehmen an, dass Merkmale bei gegebener Klasse unabhängig sind. Varianten, Spamfilter, Grenzen und Python-Code.
Naive Bayes ist eine Familie probabilistischer Klassifikatoren, die den Satz von Bayes unter der „naiven“ Annahme anwenden, dass Merkmale voneinander unabhängig sind, sobald die Klasse bekannt ist. Dank dieser Annahme kann das Modell die Verteilung jedes Merkmals innerhalb jeder Klasse separat lernen. Das Training besteht daher aus einem einzigen Zähldurchlauf über die Trainingsdaten, und bei der Vorhersage werden nur einige gespeicherte Wahrscheinlichkeiten kombiniert. Mehran Sahami und seine Kolleginnen und Kollegen wandten das Verfahren 1998 auf Spam-E-Mails an. Darauf basierende Bayes-Spamfilter verbreiteten sich Anfang der 2000er-Jahre. Als schnelle und leistungsfähige Vergleichsbasis im überwachten Lernen für Text und andere sehr hochdimensionale Daten ist das Verfahren weiterhin relevant.
So funktioniert Naive Bayes#
Der Satz von Bayes gibt die Wahrscheinlichkeit einer Klasse C bei den Merkmalen x₁ … xₙ als P(C | x) = P(C)·P(x | C) / P(x) an. Die Schätzung von P(x | C) für jede Kombination von Merkmalswerten würde einen enormen Datensatz erfordern. Deshalb nimmt Naive Bayes bedingte Unabhängigkeit an und zerlegt den Ausdruck in P(x₁ | C)·P(x₂ | C)·…·P(xₙ | C). Der Klassifikator sagt die Klasse mit dem größten Produkt aus der A-priori-Wahrscheinlichkeit P(C) und diesem Ausdruck voraus. P(x) lässt er weg, da dieser Wert für alle Klassen gleich ist. Implementierungen addieren Log-Wahrscheinlichkeiten, anstatt Wahrscheinlichkeiten zu multiplizieren, weil das Produkt aus Tausenden kleiner Zahlen bei Gleitkommaberechnungen gegen null unterläuft.
Das Zählen führt zu einem Fehlermodus: Ein Wort, das im Training nie zusammen mit einer Klasse vorkam, erhält die Wahrscheinlichkeit null. Bei jedem Dokument, das dieses Wort enthält, wird dadurch die Wahrscheinlichkeit dieser Klasse auf null gesetzt – unabhängig von den übrigen Hinweisen. Additive Glättung behebt das Problem, indem sie zu jeder Häufigkeit einen Pseudozählwert α addiert. α = 1 wird als Laplace-Glättung bezeichnet und ist die Standardeinstellung in scikit-learn.
Arten von Naive-Bayes-Klassifikatoren#
Die Varianten unterscheiden sich durch die Verteilung, die sie für jedes Merkmal innerhalb einer Klasse annehmen. Multinomial-Naive-Bayes modelliert Häufigkeiten, etwa wie oft jedes Wort in einem Dokument vorkommt, und ist das Standardverfahren für Text. Bernoulli-Naive-Bayes modelliert das binäre Vorhandensein oder Fehlen von Wörtern und wertet auch das Fehlen für eine Klasse typischer Wörter negativ. Gaussian-Naive-Bayes passt für jedes stetige Merkmal in jeder Klasse eine Normalverteilung mit eigenem Mittelwert und eigener Varianz an. Complement-Naive-Bayes schätzt die Wortstatistiken jeder Klasse anhand aller anderen Klassen. Das eignet sich für unausgewogene Textdatensätze. Kategoriales Naive Bayes verarbeitet Merkmale, die einen festen Satz von Kategorieausprägungen annehmen.
Dieses Beispiel trainiert MultinomialNB aus scikit-learn anhand der Worthäufigkeiten aus sechs markierten Nachrichten und bewertet zwei neue Nachrichten:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
# Tiny labeled corpus: 1 = spam, 0 = legitimate
texts = [
"win a free prize now",
"free cash bonus click now",
"claim your free reward today",
"meeting moved to monday",
"lunch with the team today",
"project review notes attached",
]
labels = [1, 1, 1, 0, 0, 0]
# Count words, then learn class priors and per-class word probabilities (alpha=1 is Laplace smoothing)
vectorizer = CountVectorizer()
model = MultinomialNB(alpha=1.0)
model.fit(vectorizer.fit_transform(texts), labels)
new = vectorizer.transform(["free prize today", "notes from the monday meeting"])
print(f"P(spam): {model.predict_proba(new)[:, 1].round(3)}")Die erste Nachricht erhält eine Spam-Wahrscheinlichkeit von 0,881, da „free“ und „prize“ nur in Spam-Nachrichten vorkommen. Die zweite erhält 0,053, da „notes“, „monday“ und „meeting“ nur in legitimen E-Mails vorkommen. Ohne Glättung hätte „free“ unter der legitimen Klasse die Wahrscheinlichkeit null. Jede legitime Nachricht, die dieses Wort enthält, würde daher als sicherer Spam eingestuft.
Stärken und Einschränkungen#
Training und Vorhersage skalieren linear mit der Anzahl der Beispiele und Merkmale. Naive Bayes kann daher Millionen von Dokumenten bei sehr niedriger Inferenzlatenz verarbeiten. Die Implementierungen in scikit-learn lassen sich mit partial_fit durch neue Batches für das Online-Lernen aktualisieren. Außerdem benötigt das Verfahren nur wenige Daten: Ng und Jordan (2001) zeigten, dass Naive Bayes seinen asymptotischen Fehlerwert mit weniger Trainingsbeispielen erreicht als die logistische Regression. Diese erzielt einen geringeren Fehler, sobald ausreichend Daten vorhanden sind. Die Klassenvorhersagen sind oft auch bei korrelierten Merkmalen korrekt, da nur die Rangfolge der Klassen stimmen muss.
Die Wahrscheinlichkeiten selbst sind schlecht kalibriert. Korrelationen zwischen Merkmalen führen dazu, dass dieselbe Evidenz mehrfach gezählt wird und die Werte dadurch gegen 0 oder 1 tendieren. Anwendungen, die verlässliche Konfidenz-Werte benötigen, kalibrieren sie daher anhand zurückgehaltener Daten neu. Ein Beutel unabhängiger Wörter kann außerdem weder Wortreihenfolge noch Wechselwirkungen abbilden. So wirkt „nicht gut“ wie eine Mischung aus Verneinung und positivem Wort. Modelle mit Attention, etwa Transformer, erfassen den Kontext.
Anwendungen#
- Spamfilterung: E-Mail-Filter bewerten Nachrichten anhand der enthaltenen Wörter, Absendermuster und Links. Sie aktualisieren die Wortstatistiken, wenn Nutzerinnen und Nutzer Nachrichten als Spam markieren.
- Sentimentanalyse: Bewertungen und Supportanfragen werden anhand ihrer Wörter als positiv oder negativ eingestuft. Das ist häufig das erste Modell, das vor der Feinabstimmung eines Sprachmodells eingesetzt wird.
- Dokumentenweiterleitung: Nachrichtenartikel, juristische Schriftsätze und Supportanfragen werden Themen oder Warteschlangen zugeordnet. Wenn einige Kategorien deutlich seltener sind als andere, kommt häufig Complement-Naive-Bayes zum Einsatz.
- Vergleichsmodelle für die Verarbeitung natürlicher Sprache (NLP): Naive Bayes dient bei der Spracherkennung und Themenzuordnung als schneller Vergleichswert, den jedes aufwendigere Modell übertreffen muss.
Naive Bayes in der Computer Vision#
Benachbarte Pixel sind stark korreliert. Werden rohe Pixel als unabhängige Merkmale behandelt, gehen die Kanten und Texturen verloren, die Objekte ausmachen. Konvolutionelle neuronale Netze erfassen diese Merkmale, indem sie benachbarte Bereiche gemeinsam verarbeiten. Vor dem Deep Learning wandte der Ansatz „Bag of Visual Words“ Naive Bayes auf Histogramme lokaler Deskriptoren wie SIFT an. Diese wurden mit k-Means-Clustering zu visuellen Wörtern gruppiert – dem visuellen Pendant zu Worthäufigkeiten. Die Anzahl der Objektklassen, die YOLO26 bei der Objekterkennung findet, ergibt einen ähnlichen Häufigkeitsvektor. Ein multinomiales Naive-Bayes-Modell kann daher allein anhand erkannter Objekte eine Szene als Straße, Küche oder Büro einstufen.
Naive Bayes im Vergleich zu verwandten Modellen#
- Bayes'sche Netze: Naive Bayes ist das einfachste Bayes'sche Netz: Die Klasse ist die einzige übergeordnete Variable jedes Merkmals, und zwischen den Merkmalen gibt es keine Verbindungen. Allgemeine Bayes'sche Netze ergänzen solche Verbindungen, um Abhängigkeiten abzubilden.
- Bayes'sche Inferenz: Das „Bayes“ in Naive Bayes bezieht sich auf den Satz von Bayes. Standardmäßige Naive-Bayes-Verfahren schätzen jede Wahrscheinlichkeit als geglättete Häufigkeit, also als einzelnen Schätzwert. Vollständig Bayes'sche Verfahren behalten dagegen für jeden Parameter eine Wahrscheinlichkeitsverteilung bei.
- Support-Vektor-Maschinen (SVM): Sie lernen direkt eine diskriminative Trennlinie, benötigen dafür beim Training aber mehr Rechenaufwand. Bei der Sentiment-Klassifikation stellten Wang und Manning (2012) fest, dass Naive Bayes bei kurzen Textausschnitten genauer war als SVMs, während SVMs bei vollständigen Rezensionen besser abschnitten.










