如何使用高斯朴素贝叶斯的对数概率?

机器算法验证 机器学习 分类 朴素贝叶斯
2022-03-29 01:08:44

我目前正在实现一个高斯朴素贝叶斯分类器。当然,如果我按

argmaxCiP(Ci)P(D|Ci),

那么概率会变得非常小。所以我想使用对数概率。我看到了三种可能性:

argmaxCiP(Ci)logP(D|Ci),

argmaxCilogP(Ci)logP(D|Ci),

argmaxCilogP(Ci)+logP(D|Ci),

其中哪一个是正确的方法?从计算的角度来看,第二个是正确的,因为对于其他人,我得到的是负值,但从数学的角度来看,第三个是正确的,原因如下:

P(Ci|D)=P(Ci)P(D|Ci)P(D)=P(Ci)P(D|Ci)

logP(Ci|D)=log[P(Ci)P(D|Ci)]=logP(Ci)+logP(D|Ci)

P(D) 可以被删除,因为它不依赖于类。无论如何,对于所有变体,我得到的值都在 [0,1] 之外,但我认为这没关系,因为我正在计算概率密度(来自高斯分布)而不是概率。

我有第二个问题。我也有兴趣了解每对类的每个功能的重要性。如何根据高斯朴素贝叶斯计算?我需要这个,因为我想可视化每对类的 10 个最重要的特征。

1个回答

第三个选项是正确的。一般来说,确实有: 代入朴素贝叶斯方程,你得到

log(ab)=log(a)+log(b)
log(P(class i| data))log(P(classi))+jlog(P(dataj|classi))

该值可能为负。如果您的所有术语都是实际概率,它们将介于零和一之间,因此日志都将介于和零之间,它们的总和也是如此。事实上,如果您看到正对数概率,您应该担心。我们经常通过计算某事物的负对数似然来绕过这个事实,这会消除负号。

如果您将概率密度加入混合中,这不一定成立,因为这些值可能大于 1。


有一些关于在朴素贝叶斯中确定变量重要性的帖子(例如,这个),所以你可能想从那里开始......