2012-08-25 9 views
5

Ich denke, ich habe das meiste davon richtig umgesetzt. Ein Teil verwirrte mich:Naive Bayesian und Null-Frequenz-Ausgabe

Das Null-Frequenz-Problem: Add 1 zu der Anzahl für jede Attributwert-Klasse-Kombination (Laplace-Schätzer), wenn ein Attributwert nicht mit jedem Klassenwert auftritt.

Hier einige meiner Kundennummer:

//Clasify 
string text = "Claim your free Macbook now!"; 
double posteriorProbSpam = classifier.Classify(text, "spam"); 
Console.WriteLine("-------------------------"); 
double posteriorProbHam = classifier.Classify(text, "ham"); 

Und das Wort sagen ‚frei‘ irgendwo in den Trainingsdaten vorhanden sind

//Training 
classifier.Train("ham", "Attention: Collect your Macbook from store."); 
*Lot more here* 
classifier.Train("spam", "Free macbook offer expiring."); 

Aber das Wort in meinen Trainingsdaten für die Kategorie vorhanden ist, "Spam" nur nicht in "Schinken". Wenn ich also gehe, um posteriorPropham zu berechnen, was mache ich, wenn ich auf das Wort "frei" stoße?

enter image description here

Antwort

5

noch hinzufügen. Der Grund: Naive Bayes Modelle P("free" | spam) und P("free" | ham) als völlig unabhängig, so dass Sie die Wahrscheinlichkeit von jedem völlig unabhängig schätzen wollen. Der Laplace-Schätzer, den Sie für P("free" | spam) verwenden, ist (count("free" | spam) + 1)/count(spam); P("ham" | spam) ist das gleiche.

Wenn Sie darüber nachdenken, was es bedeuten würde, keine hinzuzufügen, würde es keinen Sinn ergeben: Wenn Sie einmal "frei" in ham sehen, ist es weniger wahrscheinlich, dass Sie "frei" in Spam sehen.

+0

Danke. Ich habe gerade bearbeitet, um die Formel einzuschließen, der ich folge. Also zum Beispiel P (viagra | Spam), wenn die Trainingsdaten 0 für viagra in der Kategorie 'Spam' zählen, sollte ich nur 1 hinzufügen? –

+0

Wenn Sie die Laplace-Glättung verwenden möchten, fügen Sie eins zu * all * der Zähler und Nenner hinzu, nicht nur die Nullzählung. Wenn Sie also 10 kostenlose | Spam-, 5 kostenlose | Nicht-Spam-, 50 Spam- und 100 nicht-Spam-Nachrichten haben, würden Sie 'P (frei | Spam) = (10 + 1)/(50 + 1)' schätzen , P (Spam) = (50 + 1)/(150 + 1) ',' P (frei) = (15 + 1)/(150 + 1) '. Sie können auch eine Zahl verwenden, die kleiner als 1 ist (z. B. 0,1, normalerweise "Alpha" genannt), da dies der Verwendung einer Verteilung [Dirichlet-alpha] (http://en.wikipedia.org/wiki/Dirichlet_distribution) entspricht ] (http://en.wikipedia.org/wiki/Prior_probability) zu diesen Wahrscheinlichkeiten.) – Dougal

+0

Ja, das ist, was ich getan habe. Die Dinge sehen einige Male gut aus, aber andere enden mit Wahrscheinlichkeiten größer als 1. Wenn man die obige Formel betrachtet, ist dies leicht möglich, abhängig vom Ergebnis des Nenners. –

Verwandte Themen