5
我想我已經正確實施了大部分。有一部分與我混淆:樸素貝葉斯和零頻問題
零頻率問題: 當屬性值沒有出現在每個類值時,爲每個屬性值類組合(拉普拉斯估計器)加上1。
下面是我的一些客戶端代碼:
//Clasify
string text = "Claim your free Macbook now!";
double posteriorProbSpam = classifier.Classify(text, "spam");
Console.WriteLine("-------------------------");
double posteriorProbHam = classifier.Classify(text, "ham");
現在說這個詞「免費」是存在於訓練數據的地方
//Training
classifier.Train("ham", "Attention: Collect your Macbook from store.");
*Lot more here*
classifier.Train("spam", "Free macbook offer expiring.");
但這個詞在類別我的訓練數據存在'垃圾郵件'只在'火腿'中沒有。所以當我去計算posteriorProbHam時,當我遇到'free'這個詞時我該怎麼做。
謝謝。我剛剛編輯了包含我正在遵循的公式。因此,例如P(viagra |垃圾郵件),如果訓練數據在垃圾郵件類別中對viagra有0個計數,我應該只加1? –
如果您想使用拉普拉斯平滑,請在分子和分母的*全部*中加一個,而不僅僅是零計數。因此,如果您有10個免費垃圾郵件,5個免費垃圾郵件,50個垃圾郵件總數,100個非垃圾郵件總數,您會估計'P(免費垃圾郵件)=(10 + 1)/(50 + 1)' ,「P(垃圾郵件)=(50 + 1)/(150 + 1)」,「P(免費)=(15 + 1)/(150 + 1)」。您也可以使用小於1的數字(例如0.1,通常稱爲「alpha」,因爲它對應於使用[Dirichlet-alpha](http://en.wikipedia.org/wiki/Dirichlet_distribution)分佈作爲您的[prior ](http://en.wikipedia.org/wiki/Prior_probability)對這些概率。) – Dougal
是的,這就是我最終做的。有些東西看起來不錯,但是其他人的概率大於1.看看上面的公式,這很容易取決於分母的結果。 –