我正在为C#开发Naive Bayes解决方案,其中有两种可能的结果。我找到了一个小样本代码,但想知道是否有人能够解释最后一行。
分析器发现一个单词属于两个类别中的一个
的概率 cat1count
是在类别1中找到的单词数量(如果在类别1中找到2次单词,那么它将是2 /类别1中的单词总数)
cat1total
=第1类中的总字数
据我了解,bw
是该词在第1类中的概率,而gw
是该词在第2类中的概率
pw
和fw
是我开始有点迷失的地方。完整的源代码可以找到here。
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
,gw
和pw
是什么。
答案 0 :(得分:1)
对于正在分析的文本(例如推文)中的每个特定单词w
,一遍又一遍地调用此代码。所有变量都是使用频率估计的条件概率。
bw
是单词w
的概率,因为该单词是1类文本
gw
是单词w
的概率,因为该单词是第2类文本
pw
重新调整概率bw
,以便很少看到的单词与常见单词的比例相似(数学上,除法表示pw
是条件概率)
fw
只是简单地移动比例,以便pw
不能为零(或一个)。例如,如果pw=0
和n=10
,fw = ((1 * 0.5) + (10 * 0)) / (1 + 10) = 0.045
。 (一般来说,理解这段代码的一个好方法是使用一些不同的数字,看看会发生什么。)
在朴素贝叶斯中,你可能知道,条件概率是相乘的(在这种情况下通过你指向我的github Analyzer.cs file中的LogProbability
函数),所以你遇到麻烦在乘法中的任何地方都有零条件概率,因为最终结果为零。因此,通常的做法是替换小数而不是零,这是fw
的目的。