贝叶斯分类器的实现细节

时间:2011-11-03 20:57:20

标签: algorithm classification bayesian

我已经实现了一个简单的贝叶斯分类器,但是当我在非平凡的数据量上使用它时,我遇到了一些溢出问题。

为了保持数字较小但仍然准确,我试图采用的一种策略是,对于等式的每个部分,使用最大公约数来减少分子和分母。然而,这只有在它们有一个公约数时才有效......

注意,这个问题有两个方面,当我将分母和分子分开进行大部分计算时我会遇到整数溢出,当我在飞行中进行大多数计算时,使用双算术,我遇到了各种各样的实际上小的双值具有的问题/限制(由IEEE 754定义)。

我相信你们其中有些人之前已经实现了这个算法,你是如何处理这些问题的?我不想拉入任意精度类型,因为它们花费太多而且我确信存在一个不需要它们的解决方案。

感谢。

2 个答案:

答案 0 :(得分:3)

通常你处理这个问题的方法是记录日志和使用添加,然后在你想要回到概率空间时进行exp。

p1 * p2 * p3 * ... * pn = exp(log(p1)+ log(p2)+ log(p3)+ ... log(pn))

通过在日志空间中工作来避免流量不足。

答案 1 :(得分:0)

如果您在两个类别之间进行分类,则可以引入每个类别的概率对数比率。所以如果:

log(Pr(cat1) / Pr(cat2)) <=> 0 # positive would favor cat1 and negative cat2

这等于:

log(Pr(cat1)) - log(Pr(cat2)) <=> 0

如果(如贝叶斯分类器中),类别概率本身就是给定条件的概率产物:

log(Pr(cat1|cond1)) + ... <=> log(Pr(cat2|cond1)) + ...

因此,你正在处理求和而不是乘法,你需要一个大量的数据集来处理同样的事情。