为什么在GaussianNB[scikit-learn]中使用对数概率估计



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

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

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

  • predict只为您提供每个示例的类
  • predict_proba为每个类提供概率,而predict只是取概率最大的类
  • predict_log_proba为您提供概率的对数,这通常更方便,因为概率可能会变得非常小

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

最后,由于稳定性和速度的原因,Naive Bayes分类器通常本身在对数空间中工作,因此首先计算exp(logP),然后再计算logP是浪费的。

让我们先来看看问题,向量{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(y=1|w1,w2,w3,__,w_d)=0.6*0.2*0.23*0.04*0.001*0.45*0.012_ SO ON

当乘以可能性、时,没有任何地方是有问题的

注意:-在python中,float是四舍五入到一些有效数字。这意味着当你有很多可能性时,你无法获得正确的结果。

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

log(p(y=1|w1,w2,w3,__,w_d))=log(p

现在很好

相关内容

  • 没有找到相关文章

最新更新