Penso di aver implementato la maggior parte correttamente. Una parte mi ha confuso:Naive Bayesian e problema a frequenza zero
Il problema di frequenza zero: Aggiungere 1 al conteggio per ogni combinazione di classe valore di attributo (stimatore Laplace) quando un valore di attributo non si verifica con ogni valore di classe.
Ecco alcuni dei miei codice client:
//Clasify
string text = "Claim your free Macbook now!";
double posteriorProbSpam = classifier.Classify(text, "spam");
Console.WriteLine("-------------------------");
double posteriorProbHam = classifier.Classify(text, "ham");
Ora dire la parola 'libero' è presente nei dati di training da qualche parte
//Training
classifier.Train("ham", "Attention: Collect your Macbook from store.");
*Lot more here*
classifier.Train("spam", "Free macbook offer expiring.");
Ma la parola è presente nella mia dati di allenamento per la categoria 'spam' non solo in 'ham'. Quindi quando vado a calcolare posteriorProbHam cosa faccio quando mi imbatto nella parola 'free'.
Grazie. Ho appena modificato per includere la formula che sto seguendo. Quindi per esempio P (viagra | Spam), se i dati di allenamento hanno 0 per il viagra nella categoria 'spam', dovrei aggiungere 1? –
Se si desidera utilizzare il livellamento Laplaciano, aggiungere uno a * tutti * dei numeratori e denominatori, non solo i conteggi zero. Quindi se disponi di 10 | spam gratuiti, 5 gratuiti | non spam, 50 spam totali, 100 non spam totali, stimerai 'P (free | spam) = (10 + 1)/(50 + 1)' , 'P (spam) = (50 + 1)/(150 + 1)', 'P (libero) = (15 + 1)/(150 + 1)'. Puoi anche usare un numero inferiore a 1 (es. 0.1, tipicamente chiamato "alpha", in quanto corrisponde all'utilizzo di una distribuzione [Dirichlet-alpha] (http://en.wikipedia.org/wiki/Dirichlet_distribution) come tuo ] (http://en.wikipedia.org/wiki/Prior_probability) su queste probabilità.) – Dougal
Sì, questo è quello che ho finito per fare. Le cose sembrano buone alcune volte, tuttavia altre finiscono con probabilità maggiori di 1. Osservando la formula sopra, questo è facilmente possibile a seconda del risultato del denominatore. –