【问题标题】:Implementation details of a Bayesian classifier贝叶斯分类器的实现细节
【发布时间】:2011-12-21 13:16:39
【问题描述】:

我已经实现了一个简单的贝叶斯分类器,但是在处理大量数据时遇到了一些溢出问题。

为了使数字保持较小但仍然准确,我尝试了一种策略,即不断减少分子和分母,使方程的每个部分的最大公约数。但是,这仅在它们具有公约数时才有效...

请注意,问题是双向的,当我在大多数计算中保持分母和分子分开时,我会遇到整数溢出问题,当我使用双算术即时进行大多数计算时,我会遇到各种非常小的双精度值所具有的问题/限制(由 IEEE 754 定义)。

我相信你们中的一些人之前已经实现过这个算法,你们是如何处理这些问题的?我不希望引入任意精度类型,因为它们成本太高,而且我确信存在不需要它们的解决方案。

谢谢。

【问题讨论】:

    标签: algorithm classification bayesian


    【解决方案1】:

    通常处理这种情况的方法是获取日志并使用加法,然后如果您想回到概率空间,则执行 exp。

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

    您可以通过在日志空间中工作来避免欠流。

    【讨论】:

      【解决方案2】:

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

      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)) + ...
      

      因此,您处理的是求和而不是乘法,并且您将需要大量数据集才能遇到同样的问题。

      【讨论】:

        猜你喜欢
        • 2012-07-15
        • 2010-11-08
        • 1970-01-01
        • 2012-11-01
        • 2017-11-05
        • 2017-01-10
        • 2019-08-08
        • 2012-06-26
        相关资源
        最近更新 更多