【发布时间】:2013-12-18 14:42:02
【问题描述】:
我目前正在使用 scikit-learn 的 GaussianNB 包。
我注意到我可以选择以几种不同的方式返回分类结果。返回分类的一种方法是使用 predict_log_proba 方法。
为什么我会选择使用 predict_log_proba 与 predict_proba 与 predict?
【问题讨论】:
标签: scikit-learn gaussian
我目前正在使用 scikit-learn 的 GaussianNB 包。
我注意到我可以选择以几种不同的方式返回分类结果。返回分类的一种方法是使用 predict_log_proba 方法。
为什么我会选择使用 predict_log_proba 与 predict_proba 与 predict?
【问题讨论】:
标签: scikit-learn gaussian
【讨论】:
使用概率计算时,通常在对数空间而不是线性空间中进行计算,因为概率通常需要相乘,导致它们变得非常小并且容易出现舍入误差。此外,像KL divergence 这样的一些量可以根据对数概率定义或轻松计算(注意 log(P/Q) = log(P) - log(Q))。
最后,出于稳定性和速度的原因,朴素贝叶斯分类器本身通常在日志空间中工作,因此首先计算 exp(logP) 只是稍后返回 logP 是浪费的。
【讨论】:
exp 来节省时间。
让我们先看看问题, 向量的 {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))
现在好了
【讨论】: