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)classP(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)
.
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 istP(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)∝13⋅1⋅710=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/3⋅0⋅2/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!