Bayes ベースのスパム検出について理解しようとしていますが、コーディング方法を理解するのが困難です。それを理解するために、以下のように SpamAssassin のコードを読んでいます。 http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Bayes/CombineChi.pm?view=markup
しかし、chi2q がどのように機能するのか理解できませんでした。
# Chi-squared function (API changed; see comment above)
107 sub chi2q {
108 my ($x2, $halfv) = @_;
109
110 my $m = $x2 / 2.0;
111 my ($sum, $term);
112 $sum = $term = exp(0 - $m);
113
114 # replace 'for my $i (1 .. (($v/2)-1))' idiom, which creates a temp
115 # array, with a plain C-style for loop
116 my $i;
117 for ($i = 1; $i < $halfv; $i++) {
118 $term *= $m / $i;
119 $sum += $term;
120 }
121 return $sum < 1.0 ? $sum : 1.0;
122 }
Google で検索したり、本を読んだりしましたが、理論からコードまでを含む完全な説明が見つかりません。
なぜそれが機能するのか説明できますか?