我目前正在使用scikit-learn的GaussianNB包。
我注意到我可以选择以几种不同的方式返回分类结果。返回分类的一种方法是使用predict_log_proba方法。
为什么我会选择使用predict_log_proba而不是predict_proba与预测?
答案 0 :(得分:10)
答案 1 :(得分:8)
当使用概率进行计算时,在日志空间而不是线性空间中这样做是很常见的,因为概率通常需要相乘,导致它们变得非常小并且会受到舍入误差的影响。此外,像KL divergence这样的一些量要么根据对数概率定义要么容易计算(注意log(P / Q)= log(P) - log(Q))。
最后,出于稳定性和速度的原因,朴素贝叶斯分类器通常在日志空间中工作,因此首先计算exp(logP)
只是为了让logP
稍后回来是浪费。
答案 2 :(得分:0)
先看问题, 向量的后验{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))
现在好了