我正在尝试了解基于贝叶斯的垃圾邮件检测,但很难理解如何对其进行编码。为了理解它,我正在阅读 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 }
我试图谷歌或阅读书籍,但找不到完整的解释,包括从理论到代码。
你能解释一下它为什么起作用吗?