Naive Bayes verstehen


47

Von StatSoft, Inc. (2013), Electronic Statistics Textbook , "Naive Bayes Classifier" :

Bildbeschreibung hier eingeben

Betrachten Sie das in der obigen Abbildung gezeigte Beispiel, um das Konzept der Naive Bayes-Klassifizierung zu veranschaulichen. Wie angegeben, können die Objekte als GRÜN oder ROT klassifiziert werden. Meine Aufgabe ist es, neue Fälle bei ihrem Eintreffen zu klassifizieren, dh zu entscheiden, zu welcher Klassenbezeichnung sie gehören, basierend auf den aktuell ausgeführten Objekten.

Da es doppelt so viele GRÜNE Objekte wie ROT gibt, kann man davon ausgehen, dass ein neuer Fall (der noch nicht beobachtet wurde) doppelt so häufig GRÜN als ROT ist. In der Bayes'schen Analyse ist dieser Glaube als die vorherige Wahrscheinlichkeit bekannt. Vorherige Wahrscheinlichkeiten basieren auf früheren Erfahrungen, in diesem Fall dem Prozentsatz der GRÜNEN und ROTEN Objekte, und werden häufig verwendet, um Ergebnisse vorherzusagen, bevor sie tatsächlich eintreten.

So können wir schreiben:

Bildbeschreibung hier eingeben

Da es insgesamt 60 Objekte gibt, von denen 40 GRÜN und 20 ROT sind, lauten unsere vorherigen Wahrscheinlichkeiten für die Klassenzugehörigkeit:

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Nachdem wir unsere vorherige Wahrscheinlichkeit formuliert haben, können wir nun ein neues Objekt klassifizieren (WEISSER Kreis). Da die Objekte gut gruppiert sind, ist anzunehmen, dass die Wahrscheinlichkeit, dass die neuen Fälle zu dieser bestimmten Farbe gehören, umso größer ist, je mehr GRÜNE (oder ROTE) Objekte sich in der Nähe von X befinden. Um diese Wahrscheinlichkeit zu messen, zeichnen wir einen Kreis um X, der eine a priori zu wählende Anzahl von Punkten umfasst, unabhängig von ihrer Klassenbezeichnung. Dann berechnen wir die Anzahl der Punkte im Kreis, die zu jeder Klassenbezeichnung gehören. Daraus berechnen wir die Wahrscheinlichkeit:

Bildbeschreibung hier eingeben

Aus der obigen Abbildung geht hervor, dass die Wahrscheinlichkeit von X bei GRÜN kleiner ist als die Wahrscheinlichkeit von X bei ROT, da der Kreis 1 GRÜNES und 3 ROTES Objekt umfasst. Somit:

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Obwohl die vorherigen Wahrscheinlichkeiten angeben, dass X zu GRÜN gehören kann (vorausgesetzt, es gibt doppelt so viele GRÜNE im Vergleich zu ROT), gibt die Wahrscheinlichkeit etwas anderes an. dass die Klassenzugehörigkeit von X ROT ist (vorausgesetzt, es gibt mehr ROTE Objekte in der Nähe von X als GRÜN). In der Bayes'schen Analyse wird die endgültige Klassifikation erstellt, indem beide Informationsquellen, dh der Prior und die Wahrscheinlichkeit, unter Verwendung der sogenannten Bayes'schen Regel (benannt nach Rev. Thomas Bayes 1702-1761) zu einer posterioren Wahrscheinlichkeit kombiniert werden.

Bildbeschreibung hier eingeben

Schließlich klassifizieren wir X als ROT, da seine Klassenzugehörigkeit die größte hintere Wahrscheinlichkeit erreicht.

Hier kommt die Schwierigkeit meines mathematischen Verständnisses ins Spiel.

Bildbeschreibung hier eingeben

p (Cj | x1, x2, x ..., xd) ist die hintere Wahrscheinlichkeit einer Klassenzugehörigkeit, dh die Wahrscheinlichkeit, dass X zu Cj gehört, aber warum schreibt man es so?

Berechnung der Wahrscheinlichkeit?

Bildbeschreibung hier eingeben

Hintere Wahrscheinlichkeit?

Bildbeschreibung hier eingeben

Ich habe nie Mathe genommen, aber mein Verständnis von naiven Bayes ist in Ordnung. Ich denke, nur wenn es um diese zerlegten Methoden geht, bin ich verwirrt. Könnte jemand helfen, diese Methoden zu visualisieren und die Mathematik verständlich aufzuschreiben?


12
(+1) Ich bewundere die sehr sorgfältige und klare Art und Weise, wie Sie Ihre Frage gestellt haben.
Rolando2

2
@ rolando2: Alle Zahlen und fast der gesamte Text dieser Frage stammen von statsoft.com/textbook/naive-bayes-classifier
Franck Dernoncourt

Bitte editieren Sie diesen Beitrag, um Material von anderer Seite eindeutig zuzuordnen, wie in Referenzmaterial von anderen beschrieben .
Scortchi

Die ordnungsgemäße Zuweisung direkter Angebote war auf Stack Exchange-Sites schon immer eine Anforderung. Wie auch immer, das Versäumnis ist leicht zu beheben; & Ich habe es getan. Sie müssen Ihr Konto nicht löschen. Bitte überdenken Sie es erneut.
Scortchi - Wiedereinsetzung von Monica

Antworten:


50

Ich werde den gesamten Naive Bayes-Prozess von Grund auf durchlaufen, da mir nicht ganz klar ist, wo Sie aufgehängt werden.

Wir wollen die Wahrscheinlichkeit ermitteln, dass zu jeder Klasse ein neues Beispiel gehört: ). Wir berechnen dann diese Wahrscheinlichkeit für jede Klasse und wählen die wahrscheinlichste Klasse aus. Das Problem ist, dass wir diese Wahrscheinlichkeiten normalerweise nicht haben. Mit Bayes 'Theorem können wir diese Gleichung jedoch in einer besser handhabbaren Form umschreiben.P(class|feature1,feature2,...,featuren

Bayes 'Daraus ergibt sich einfach oder in Bezug auf unser Problem:

P(A|B)=P(B|A)P(A)P(B)
P(class|features)=P(features|class)P(class)P(features)

Wir können dies vereinfachen, indem wir entfernen . Wir können dies tun, weil wir für jeden Wert der einstufen werden. wird jedes Mal gleich sein - es hängt nicht von der . Dies lässt uns mit P(features)P(class|features)classP(features)class

P(class|features)P(features|class)P(class)

Die vorherigen Wahrscheinlichkeiten können wie in Ihrer Frage beschrieben berechnet werden.P(class)

Damit bleibt . Wir wollen die massive und wahrscheinlich sehr spärliche Gelenkwahrscheinlichkeit . Wenn jedes Feature unabhängig ist, ist Auch wenn sie nicht wirklich unabhängig sind, können wir annehmen, dass sie es sind (das ist das " naiv "Teil von naiv Bayes). Ich persönlich denke, es ist einfacher, dies für diskrete (dh kategoriale) Variablen zu überdenken. Verwenden wir also eine etwas andere Version Ihres Beispiels. Hier habe ich jede Feature-Dimension in zwei kategoriale Variablen unterteilt.P(features|class)P(feature1,feature2,...,featuren|class)

P(feature1,feature2,...,featuren|class)=iP(featurei|class)

Diskrete Beispieldaten.

Beispiel: Schulung des Klassenzimmers

Um den Klassifizierer zu trainieren, zählen wir verschiedene Teilmengen von Punkten und verwenden sie, um die vorherigen und bedingten Wahrscheinlichkeiten zu berechnen.

Die Prioren sind trivial: Es gibt sechzig Gesamtpunkte, vierzig sind grün und zwanzig sind rot. Somit ist

P(class=green)=4060=2/3 and P(class=red)=2060=1/3

Als Nächstes müssen wir die bedingten Wahrscheinlichkeiten für jeden Merkmalswert einer Klasse berechnen. Hier gibt es zwei Features: und , die jeweils einen von zwei Werten (A oder B für einen, X oder Y für den anderen). Wir müssen daher Folgendes wissen:feature1feature2

  • P(feature1=A|class=red)
  • P(feature1=B|class=red)
  • P(feature1=A|class=green)
  • P(feature1=B|class=green)
  • P(feature2=X|class=red)
  • P(feature2=Y|class=red)
  • P(feature2=X|class=green)
  • P(feature2=Y|class=green)
  • (falls es nicht offensichtlich ist, sind dies alle möglichen Paare von Merkmalswert und Klasse)

Diese lassen sich auch durch Zählen und Teilen leicht berechnen. Zum Beispiel betrachten wir für nur die roten Punkte und zählen, wie viele davon in der Region 'A' für . Es gibt zwanzig rote Punkte, die sich alle in der ' -Region befinden, also ist . Keiner der roten Punkte befindet sich im Bereich B, daher ist . Als nächstes machen wir dasselbe, aber betrachten nur die grünen Punkte. Dies ergibt und . Wir wiederholen diesen Vorgang für , um die Wahrscheinlichkeitstabelle . Vorausgesetzt, ich habe richtig gezählt, bekommen wirP(feature1=A|class=red)feature1P(feature1=A|class=red)=20/20=1P(feature1|class=red)=0/20=0P(feature1=A|class=green)=5/40=1/8P(feature1=B|class=green)=35/40=7/8feature2

  • P(feature1=A|class=red)=1
  • P(feature1=B|class=red)=0
  • P(feature1=A|class=green)=1/8
  • P(feature1=B|class=green)=7/8
  • P(feature2=X|class=red)=3/10
  • P(feature2=Y|class=red)=7/10
  • P(feature2=X|class=green)=8/10
  • P(feature2=Y|class=green)=2/10

Those ten probabilities (the two priors plus the eight conditionals) are our model

Classifying a New Example

Let's classify the white point from your example. It's in the "A" region for feature1 and the "Y" region for feature2. We want to find the probability that it's in each class. Let's start with red. Using the formula above, we know that:

P(class=red|example)P(class=red)P(feature1=A|class=red)P(feature2=Y|class=red)
Subbing in the probabilities from the table, we get

P(class=red|example)131710=730
We then do the same for green:
P(class=green|example)P(class=green)P(feature1=A|class=green)P(feature2=Y|class=green)

Subbing in those values gets us 0 (2/302/10). Finally, we look to see which class gave us the highest probability. In this case, it's clearly the red class, so that's where we assign the point.

Notes

In your original example, the features are continuous. In that case, you need to find some way of assigning P(feature=value|class) for each class. You might consider fitting then to a known probability distribution (e.g., a Gaussian). During training, you would find the mean and variance for each class along each feature dimension. To classify a point, you'd find P(feature=value|class) by plugging in the appropriate mean and variance for each class. Other distributions might be more appropriate, depending on the particulars of your data, but a Gaussian would be a decent starting point.

I'm not too familiar with the DARPA data set, but you'd do essentially the same thing. You'll probably end up computing something like P(attack=TRUE|service=finger), P(attack=false|service=finger), P(attack=TRUE|service=ftp), etc. and then combine them in the same way as the example. As a side note, part of the trick here is to come up with good features. Source IP , for example, is probably going to be hopelessly sparse--you'll probably only have one or two examples for a given IP. You might do much better if you geolocated the IP and use "Source_in_same_building_as_dest (true/false)" or something as a feature instead.

I hope that helps more. If anything needs clarification, I'd be happy to try again!


3
Sure. If it's okay with you, I'm going to edit my answer so there's more room (and I can LaTex things).
Matt Krause

1
I expanded the training and test parts and made them into their own section. The first couple paragraphs are the same...
Matt Krause

2
Matt, this is a lot clearer than any text book definition of Naive Bayes that I came across. This is probably the best answer to any question I have seen so far on this website.
Zhubarb

@Berkan, thanks; that's very kind of you (though there are a lot of other great answers too!) If you've got any suggestions, I'd be happy to try to address them!
Matt Krause

+ 1 and stackoverflow.com/questions/10059594/… where there is a similar explanation
Drey

6

Simplifying the notation with D denoting the data, we want to find which of various P(CjD) is the largest. Now, Bayes' formula gives

P(CjD)=P(DCj)P(Cj)P(D), j=1,2,
where the denominator on the right is the same for all j. If we want to find which of P(C1D), P(C2D), is the largest, we can, of course, compute each P(CjD) and compare the values. But note that the comparisons are not really affected by the value of P(D) which is the same in all cases. We could equally well compute all the P(DCj)P(Cj) and compare (that is, without bothering to divide each P(DCj)P(Cj) by P(D) before the comparisons), and the same Cj will be chosen as having the largest posterior probability. Put another way, the posterior probability P(CjD) is proportional to the likelihood P(DCj) times the prior probability P(Cj)
P(CjD)P(DCj)P(Cj).
Finally, when the data D is a collection of (conditionally) independent observations (x1,x2,,xd) given Cj), we have that
P(DCj)=P(x1,x2,,xdCj)=P(x1Cj)P(x2Cj)P(xdCj)=1=1dP(xiCj)

1

The main assumption behind the naive bayes model is that each feature (x_i) is conditionally independent of all other features given the class. This assumption is what allows us to write the likelihood as a simple product (as you have shown).

This is also what helps the naive bayes model generalize well in practice. Consider the training phase: if we did not make this assumption, then learning would involve estimating a complicated, high dimensional distribution: p(x1, x2, ..., xn, c) in which all of the features are jointly distributed. Instead, we can train by estimating p(x1, c), p(x2, c), ..., p(xn, c), since by knowing the value c makes the values of all the other features irrelevant (they provide no additional information about x_i).

I don't know a good way to visualize this (besides the standard graphical model notation), but to make it more concrete you can write some code to learn a Naive bayes model (you can grab some example data here). Train and test. Now drop the conditional independence assumption and modify the code. Train, test, and compare to the previous model.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.