2

我正在研究 C# 的朴素贝叶斯解决方案,其中有两种可能的结果。我找到了一个小示例代码,但想知道是否有人能够解释最后一行。

分析器正在查找单词属于两个类别中的 1 个的概率

cat1count是在类别 1 中找到的单词数(如果在类别 1 中找到 2 次,则为 2 / 在类别 1 中的总字数)

cat1total= 类别 1 中的总字数

据我了解,bw是单词属于第 1 类gw的概率,是单词属于第 2 类的概率

pw并且fw是我开始有点迷失的地方。完整的源代码可以在这里找到。

        float bw = cat1count / cat1total;
        float gw = cat2count / cat2total;
        float pw = ((bw) / ((bw) + (gw)));
        float
            s = 1f,
            x = .5f,
            n = cat1count + cat2count;
        float fw = ((s * x) + (n * pw)) / (s + n);

什么是fw?我明白bw,gwpw是什么。

4

1 回答 1

1

w对于正在分析的文本(例如推文)中的每个特定单词,都会一遍又一遍地调用此代码。所有变量都是使用频率估计的条件概率。

bww是在给定单词是第 1 类文本的情况下看到该单词的概率

gww是在给定单词是第 2 类文本的情况下看到该单词的概率

pw重新调整概率bw,使罕见词与常见词的比例相似(在数学上,除法表示这pw是一个条件概率)

fw只需移动比例,使其pw不能为零(或一)。因此,如果,例如,pw=0n=10fw = ((1 * 0.5) + (10 * 0)) / (1 + 10) = 0.045。(一般来说,理解这段代码的一个好方法是玩一些不同的数字,看看会发生什么。)

如您所知,在朴素贝叶斯中,条件概率相乘(在这种情况下,通过您指向我的github Analyzer.cs 文件LogProbability中的函数),所以如果您在任何地方的条件概率为零,您就有麻烦了乘法,因为最终结果将为零。因此,通常的做法是用一个小数代替零,这就是.fw

于 2013-07-20T18:00:43.803 回答