私はそれを正しく実装したと思います。 1つの部分が混乱しました:Naive Bayesianとゼロ周波数問題
ゼロ周波数問題: すべてのクラス値で属性値が発生しない場合、すべての属性値 - クラスの組み合わせ(ラプラス推定子)の数に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を計算するために行くとき、私は単語 'フリー'に遭遇するときに何をするのですか?
ありがとうございました。私は次の式を含めるように編集しました。たとえば、P(viagra | Spam)のように、訓練データに「スパム」カテゴリのバイアグラの数が0の場合は、1を追加するだけです。 –
ラプラシアンスムージングを使用する場合は、ゼロカウントだけでなく、分子と分母の* all *に1を加えます。したがって、あなたが10の無料のスパム、5つの無料の|スパム以外のスパム、50のスパム合計、100のスパム非スパム合計を持っていれば、 'P(フリー|スパム)=(10 + 1)/(50 + 1) P(スパム)=(50 + 1)/(150 + 1)、P(空き)=(15 + 1)/(150 + 1) [Dirichlet-alpha](http://en.wikipedia.org/wiki/Dirichlet_distribution)ディストリビューションを使用することに対応するため、1より小さい数字を使用することもできます(例:0.1、通常は "alpha"と呼ばれます)。 ](http://en.wikipedia.org/wiki/Prior_probability)これらの確率について。 – Dougal
ええ、それは私がやったことです。状況はしばらく見えますが、他のものは1より大きい確率で終わります。上記の式を見ると分母の結果によって簡単に可能です。 –