【问题标题】:Why use log-probability estimates in GaussianNB [scikit-learn]?为什么在 GaussianNB [scikit-learn] 中使用对数概率估计?
【发布时间】:2013-12-18 14:42:02
【问题描述】:

我目前正在使用 scikit-learn 的 GaussianNB 包。

我注意到我可以选择以几种不同的方式返回分类结果。返回分类的一种方法是使用 predict_log_proba 方法。

为什么我会选择使用 predict_log_proba 与 predict_proba 与 predict?

【问题讨论】:

    标签: scikit-learn gaussian


    【解决方案1】:
    • predict 只是为您提供每个示例的类
    • predict_proba 为您提供每个类别的概率,而 predict 只是采用最大概率的类别
    • predict_log_proba 为您提供概率的对数,这通常更方便,因为概率可以变得非常非常小

    【讨论】:

      【解决方案2】:

      使用概率计算时,通常在对数空间而不是线性空间中进行计算,因为概率通常需要相乘,导致它们变得非常小并且容易出现舍入误差。此外,像KL divergence 这样的一些量可以根据对数概率定义或轻松计算(注意 log(P/Q) = log(P) - log(Q))。

      最后,出于稳定性和速度的原因,朴素贝叶斯分类器本身通常在日志空间中工作,因此首先计算 exp(logP) 只是稍后返回 logP 是浪费的。

      【讨论】:

      • 如果您只关心两个元素之间的相对概率,例如对于排序,您还可以通过根本不计算 exp 来节省时间。
      【解决方案3】:

      让我们先看看问题, 向量的 {w1, w2, w3, w4_ _ _ _ _ _ w_d}

      的后验

      P(y=1|w1,w2,w3,_ _ ,w_d) = P(y=1)*P(w1|y=1)*P(w2|y=1)P(w2|y=1) _ _ _ *P(w_d|y=1)

      假设每个 LIKELIHOOD 的随机概率,

      P(y=1|w1,w2,w3,_ _ ,w_d) = 0.6 * 0.2 * 0.23 * 0.04 * 0.001 * 0.45 * 0.012 _ SO ON

      在乘以 LIKELIHOOD 时,任何地方都不是问题,

      注意:- 在 python 中,浮点数四舍五入 到一些有效数字。这意味着当您有许多可能性时,您无法确定正确的结果。

      为了解决这个关键问题,我们使用对数概率。 log 的优点是它是一个单调函数,它将乘法转换为加法,与简单的乘法相比,它给出了快速准确的结果。

      log(P(y=1|w1,w2,w3,_ _ ,w_d)) = log(P(y=1)*P(w1|y=1)*P(w2|y =1)P(w2|y=1) _ _ _ *P(w_d|y=1))

      现在好了

      【讨论】:

        猜你喜欢
        • 2012-12-20
        • 2012-08-23
        • 2017-03-09
        • 2018-01-24
        • 1970-01-01
        • 2015-12-01
        • 2015-02-15
        • 2016-01-18
        • 2015-10-25
        相关资源
        最近更新 更多