Der Naive Bayes Algorithmus ist eine Klassifizierungsmethode, die auf dem sogenannten Bayes Theorem beruht. Im Kern geht er davon aus, dass das Auftreten eines Features völlig unkorreliert mit dem Auftreten eines anderen Features innerhalb der Klasse ist.
Der Algorithmus ist deshalb naiv, weil er die Features komplett unabhängig zueinander betrachtet und alle zu der Wahrscheinlichkeit der Klasse beitragen. Ein einfaches Beispiel hierzu: Ein Auto zeichnet sich dadurch aus, dass es vier Räder hat, etwa 4-5 Meter lang ist und fahren kann. Alle diese drei Features tragen unabhängig voneinander dazu dabei, dass dieser Gegenstand ein Auto ist.
Wie funktioniert der Algorithmus?
Der Naive-Bayes Algorithmus basiert auf dem Bayes Theorem. Es beschreibt eine Formel zur Berechnung der bedingten Wahrscheinlichkeit P(A|B) oder in Worten: Wie hoch ist die Wahrscheinlichkeit, dass das Ereignis A eintritt, wenn Ereignis B eingetreten ist? Als Beispiel: Wie wahrscheinlich ist es, dass ich an Corona erkrankt bin (= Ereignis A), wenn mein Schnelltest positiv ist (= Ereignis B)?
Diese bedingte Wahrscheinlichkeit lässt sich laut Bayes mithilfe der folgenden Formel berechnen:
\(\) \[P(A|B) = \frac{P(B|A) * P(A)}{P(B)} \]
- P(B|A) = Wahrscheinlichkeit, dass Ereignis B eintritt, wenn Ereignis A schon eingetreten ist
- P(A) = Wahrscheinlichkeit, dass Ereignis A eintritt
- P(B) = Wahrscheinlichkeit, dass Ereignis B eintritt
Warum sollten wir diese Formel nutzen? Kommen wir zurück zu unserem Beispiel mit dem positiven Test und der Corona Erkrankung. Die bedingte Wahrscheinlichkeit P(A|B) kann ich nicht wissen und nur über ein aufwendiges Experiment herausfinden. Die umgedrehte Wahrscheinlichkeit P(B|A) hingegen ist einfacher herauszufinden. In Worten bedeutet sie: Wie wahrscheinlich ist es, dass eine an Corona erkrankte Person einen positiven Schnelltest vorweist.
Diese Wahrscheinlichkeit lässt sich verhältnismäßig einfach herausfinden, indem man nachweislich erkrankte Personen einen Schnelltest durchführen lässt und dann das Verhältnis errechnet, wie viele der Test auch wirklich positiv waren. Die Wahrscheinlichkeiten P(A) und P(B) lassen sich ähnlich einfach herausfinden. Die Formel ermöglicht es dann die bedingte Wahrscheinlichkeit P(A|B) einfach zu errechnen.
Wenn wir nur eine Eigenschaft haben, ist damit auch schon der komplette Naive Bayes Algorithmus erklärt. Mit einem Feature für die bedingte Wahrscheinlichkeit P(x | K) für verschiedene Klassen errechnet und die Klasse mit der höchsten Wahrscheinlichkeit gewinnt. Für unser Beispiel bedeutet das, es werden die beiden bedingten Wahrscheinlichkeiten P(Person ist krank | Test ist positiv) und P(Person ist gesund | Test ist negativ) mithilfe des Bayes Theorem berechnet und die Klassifizierung erfolgt für die Klasse mit der höheren Wahrscheinlichkeit.
Wenn unser Datensatz aus mehr als nur einem Feature besteht gehen wir ähnlich vor und berechnen für jede Kombination aus Feature x und Klasse K die bedingte Wahrscheinlichkeit. Dann multiplizieren wir alle Wahrscheinlichkeiten für ein Feature. Die Klasse K, die dann das höchste Produkt an Wahrscheinlichkeiten hat, ist die entsprechende Klasse des Datensatzes.
Was sind die Vor- und Nachteile des Naive Bayes Algorithmus?
Der Naive Bayes Algorithmus ist ein beliebter Einstieg in einen Klassifizierungsanwendung, da er sehr einfach und schnell zu trainieren ist und teilweise auch gute Ergebnisse liefern kann. Sollte die Annahme der Unabhängigkeit der einzelnen Features gegeben sein, performt er sogar besser als vergleichbare Klassifizierungsmodelle, wie eine logistische Regression, und benötigt weniger Daten zum Trainieren.
Obwohl der Naive Bayes Algorithmus bereits mit wenigen Daten gute Ergebnisse erzielen kann, benötigen wir so viele Daten, dass jede Klasse mindestens einmal im Trainingsdatensatz erscheint. Ansonsten wird der Naive Bayes Classifier für die Kategorie im Testdatensatz eine Wahrscheinlichkeit von 0 als Ergebnis liefern. Außerdem ist es in der Realität sehr unwahrscheinlich, dass alle Inputvariablen komplett unabhängig voneinander sind, was sich zudem auch nur sehr schwierig testen lässt.
Wie kann man den Naive Bayes-Algorithmus verbessern?
Es gibt einige Möglichkeiten um die Leistung des Naive Bayes Algorithmus auf einen Datensatz zu verbessern. Die gängigsten Methoden werden im folgenden vorgestellt.
- Feature Engineering: Wie jedes Machine Learning Modell hängt auch der Naive Bayes Algorithmus stark von der Qualität der Eingangsdaten ab. Durch eine gute Auswahl der benötigten Merkmale lässt sich die Genauigkeit des Modells verbessern und die Gefahr für Overfitting reduzieren. Dafür können wir Techniken des Feature Engineerings nutzen, wie beispielsweise eine Merkmalsextraktion oder die Merkmalsskalierung.
- Smoothing: Wenn ein Datensatz für eine bestimmte Merkmalskombination keine Daten enthält, kann es zu dem sogenannten Null-Häufigkeits-Problem kommen. Für diese seltenen Kategorien werden dann schlechte Vorhersagen getroffen, da das Modell keine ausreichenden Strukturen erkennen konnte. Beim Naive Bayes Algorithmus wird deshalb das sogenannte Smoothing genutzt, um Situationen zu verhindern, in denen eine Nullwahrscheinlichkeit vorhergesagt wird. Beispielsweise beim “Add-One-Smoothing” wird eine Einheit des Merkmals zu der Häufigkeit hinzugefügt, um eine bessere Verallgemeinerung des Modells auf neue Daten zu gewährleisten.
- Ensemble-Methoden: Beim Ensemble Training werden mehrere Naive Bayes Modelle kombiniert und für eine gemeinsame Klassifikation genutzt. Die Genauigkeit aus dem gemeinsamen Ergebnis der Modelle ist dabei meist höher als das Ergebnis eines einzelnen Modells. Je nachdem wie die Modelle trainiert und kombiniert werden, unterscheidet man verschiedene Varianten. Eine Möglichkeit besteht beispielsweise darin, ein AdaBoost Ansatz zu nutzen, bei dem das nächste Modell lediglich auf den Daten trainiert wird, die das vorangegangene Modell falsch klassifiziert hat.
- Parameter Tuning: Auch bei Naive Bayes gibt es eine Auswahl an Hyperparametern, die an den Datensatz angepasst werden können, um die Leistung des Modells zu verbessern. Dabei kann beispielsweise der Glättungsparameter angepasst werden oder es können verschiedene Sätze von Merkmalen ausgetestet werden.
- Umgang mit unausgewogenen Daten: Der Naive Bayes Algorithmus ist abhängig davon, ob die Anzahl der Datensätze pro Klasse ausgewogen sind oder nicht. Wenn dies nicht der Fall ist kann es zu einer Verzerrung in Richtung der Mehrheitsklasse kommen. Um diese Fehler zu verhindern können Methoden wie Oversampling oder Undersampling genutzt werden. Beim Oversampling beispielsweise werden die Anzahl der Datensätze in einer Minderheitsklasse erhöht, um ein Gleichgewicht der Klassen herzustellen. Dabei können einzelne Instanzen dupliziert werden oder leicht abgeändert werden, um neue Instanzen der Minderheitsklasse zu erzeugen.
- Behandlung kontinuierlicher Merkmale: Der normale Naive Bayes Algorithmus geht davon aus, dass die Eingabemerkmale kategorisch sind. Dies ist jedoch in vielen realen Anwendungen nicht der Fall und viele Datensätze enthalten auch kontinuierliche Merkmale. Um trotzdem ein Naive Bayes Modell trainieren zu können müssen diese Merkmale erst in kategorische Daten umgewandelt werden. Es gibt verschiedene Methoden wie diese sogenannte Diskretisierung vorgenommen werden kann. Die Daten können zum Beispiel in gleichmäßige Intervalle aufgeteilt werden oder anhand von Quantilen unterteilt werden. Zwar geht bei der Diskretisierung immer ein Teil des Informationsgehalts des Datensatzes verloren, jedoch könnten sie ohne diesen Schritt gar nicht Teil des Naive Bayes Modells werden.
Diese Methoden führen dazu, dass die Leistung des Naive Bayes Modells weiter verbessert werden kann und ein möglichst robustes Modell trainiert wird.
Was ist der Unterschied zwischen Multinomial Naive Bayes und Bernoulli Naive Bayes?
Multinomial und Bernoulli Naive Bayes sind zwei häufig genutzte Varianten des ursprünglichen Naive Bayes Algorithmus, die vor allem in der Textklassifizierung Verwendung finden. Sie unterscheiden sich hauptsächlich darin, wie sie die Eingabedaten numerisch darstellen. Während Multinomial Naive Bayes darauf basiert, dass die Wortbausteine, durch die reine Anzahl oder Häufigkeit in der sie vorkommen dargestellt werden können, geht Bernoulli Naive Bayes davon aus, dass die Eingabedaten am besten durch binäre Merkmale dargestellt wird. Diese binären Merkmale messen zum Beispiel, ob ein Wort in einem Dokument vorkommt oder nicht.
Das Multinomial Naive Bayes nutzt dabei die sogenannten Bag-of-Words als Eingabedaten. Dabei wird gezählt wie oft jedes Wort in dem vorliegenden Dokument vorkommen. Das Modell schätzt dann die bedingte Wahrscheinlichkeit von jedem Wort in Abhängigkeit von der Klasse und nutzt dafür eine Multinomialverteilung. Das Bernoulli Naive Bayes hingegen nutzt binäre Eingabedaten und Merkmale, die angeben, ob ein bestimmtes Wort in dem Dokument vorkommt oder nicht. Anschließend wird analog zur Multinomial Naive Bayes die bedingte Wahrscheinlichkeit eines Merkmals in Abhängigkeit von der Klassenvariablen geschätzt, jedoch unter Verwendung einer Bernoulli Verteilung.
Aus diesem Aufbau ergibt sich ein weiterer Unterschied, der sich auf den Umgang mit fehlenden Merkmalen bezieht. Bei Multinomial Naive Bayes erhält ein fehlendes Wort die Häufigkeitszahl Null, wodurch es zu Problemen mit Nullwahrscheinlichkeiten kommen kann. Der Bernoulli Klassifikator hingegen behandelt das fehlende Wort als ein eigenes Merkmal und behandelt es auch entsprechend. Somit treten hier keine Probleme auf.
Die Wahl des Algorithmus hängt stark von der Aufgabe und vor allem der Art der Eingangsmerkmale ab. Multinomial Naive Bayes wird in vielen Fällen für Textklassifikationen verwendet, die mit diskreten Wortzahlen arbeiten und die Klassifikation anhand eines komplexen Zusammenspiels der einzelnen Worte errechnen lassen. Der Bernoulli Naive Bayes hingegen wird für binäre Merkmale genutzt bei denen die Vorhersage stärker an dem Vorhandensein oder Nicht-Vorhandensein einzelner Wörter hängt, wie beispielsweise bei der Erkennung von Spam oder der Stimmungsanalyse.
Welche Anwendungen nutzen den Naive Bayes Algorithmus?
Im Bereich des Machine Learnings wird Naive Bayes als Klassifikationsmodell eingesetzt, also zur Einordnung eines Datensatzes in eine bestimmte Klasse. Für diese Modelle gibt es verschiedene, konkrete Anwendungen für die auch Naive Bayes genutzt wird:
Natural Language Processing
In diesem Bereich kann das Modell eingesetzt werden, um einen Textabschnitt einer bestimmten Klasse zuzuordnen. E-Mail Programme sind beispielsweise daran interessiert, eingehende Mails als “Spam” oder “Nicht Spam” zu klassifizieren. Dazu werden dann die bedingten Wahrscheinlichkeiten von einzelnen Wörtern berechnet und mit der Klasse abgeglichen. Das gleiche Verfahren kann auch genutzt werden, um Social Media Kommentare als “positiv” oder “negativ” zu klassifizieren.
Obwohl Naive Bayes für diese Anwendungen im Textbereich einen schnellen und einfachen Ansatz bietet, gibt es andere Modelle, wie beispielsweise Transformer, die deutlich bessere Ergebnisse liefern. Das Naive Bayes Modell berücksichtigt nämlich keine Reihenfolge von Wörtern oder eine gewisse Anordnung. Wenn ich beispielsweise sage “Ich finde das Produkt nicht gut.” ist das wahrscheinlich keine positive Produktrezension, nur weil das Wort “gut” darin vorkommt.
Klassifizierung von Kreditrisiken
Für Banken ist der Ausfall von Krediten ein immenses Risiko, da sie große Summen an Geld verlieren, wenn ein Kunde den Kredit nicht mehr bezahlen kann. Deshalb wird viel Arbeit in Modelle gesteckt, die je nach Kunde das individuelle Ausfallrisiko errechnen können. Das ist im Endeffekt auch eine Klassifizierung bei der der Kunde entweder der Gruppe “Kreditrückzahlung” oder “Kreditausfall” zugeordnet wird. Dazu werden einige spezifische Eigenschaften, wie beispielsweise Kredithöhe, Einkommen oder Anzahl vorheriger Kredite genutzt. Mithilfe von Naive Bayes kann daraus ein zuverlässiges Klassifizierungsmodell trainiert werden.
Vorhersage von medizinischer Behandlung
In der Medizin muss ein Arzt entscheiden, welche Behandlung und welche Medikamente für den einzelnen Patienten und dessen Krankheitsbild am vielversprechendsten sind und die höchste Wahrscheinlichkeit besitzen den Patienten wieder gesund zu machen. Als Unterstützung kann dazu ein Naive Bayes Klassifizierungsmodell trainiert werden, das abhängig von Eigenschaften des Gesundheitszustands, wie Blutdruck, Wohlbefinden oder Symptome, sowie der möglichen Behandlung (Medikamente) eine Wahrscheinlichkeit berechnet, dass der Kunde wieder gesund wird oder eben nicht. Die Ergebnisse des Modells kann wiederum der Arzt in seine Entscheidung mit einbeziehen.
Das solltest Du mitnehmen
- Der Naive Bayes Algorithmus ist eine einfache Methode, um Daten zu klassifizieren.
- Er basiert auf dem Bayes Theorem und ist naiv, da er davon ausgeht, dass alle Inputvariablen und deren Ausprägung unabhängig voneinander sind.
- Der Naive Bayes Algorithmus lässt sich relativ schnell und einfach trainieren, liefert aber in vielen Fällen keine guten Ergebnisse, da die Annahme der Unabhängigkeit der Variablen verletzt ist.
Was ist blockchain-based AI?
Entdecken Sie das Potenzial der blockchain-based AI in diesem aufschlussreichen Artikel über Künstliche Intelligenz und Blockchain.
Was ist Boosting im Machine Learning?
Boosting: Eine Ensemble-Technik zur Modellverbesserung. Lernen Sie in unserem Artikel Algorithmen wie AdaBoost, XGBoost, uvm. kennen.
Was ist Feature Engineering?
Meistern Sie die Kunst des Feature Engineering: Steigern Sie die Modellleistung und -genauigkeit mit der Datentransformationen!
Was sind N-grams?
Die Macht des NLP: Erforschen Sie n-Grams in der Textanalyse, Sprachmodellierung und verstehen Sie deren Bedeutung im NLP.
Was ist das No-Free-Lunch Theorem (NFLT)?
Entschlüsselung des No-Free-Lunch-Theorems: Implikationen und Anwendungen in ML und Optimierung.
Was ist Automated Data Labeling?
Erschließen Sie die Effizienz des maschinellen Lernens mit Automated Data Labeling. Entdecken Sie die Vorteile, Techniken und Tools.
Andere Beiträge zum Thema Naive Bayes
- Scikit-Learn bietet einige Beispiele und Programmieranleitungen für den Naive Bayes Algorithmus in Python.
Niklas Lang
Seit 2020 bin ich als Machine Learning Engineer und Softwareentwickler tätig und beschäftige mich leidenschaftlich mit der Welt der Daten, Algorithmen und Softwareentwicklung. Neben meiner Arbeit in der Praxis unterrichte ich an mehreren deutschen Hochschulen, darunter die IU International University of Applied Sciences und die Duale Hochschule Baden-Württemberg, in den Bereichen Data Science, Mathematik und Business Analytics.
Mein Ziel ist es, komplexe Themen wie Statistik und maschinelles Lernen so aufzubereiten, dass sie nicht nur verständlich, sondern auch spannend und greifbar werden. Dabei kombiniere ich praktische Erfahrungen aus der Industrie mit fundierten theoretischen Grundlagen, um meine Studierenden bestmöglich auf die Herausforderungen der Datenwelt vorzubereiten.