我目前正在使用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
现在很好