我正在尝试使用R使用贝叶斯网络,目前我正在使用bnlearn
框架。 我正在尝试从数据中使用基于分数的结构学习,并尝试不同的算法和方法。
我想知道是否有bnlearn
实现的拉普拉斯平滑。我在文档中找不到有关它的任何信息。我错过了什么吗?有人知道吗?
不,不是。但是,这应该没有问题,因为bnlearn
中提供了不同的先验,除非您有一些非常具体的原因使用拉普拉斯平滑(这是一个特定的先验),否则这些应该可以。
有了结构后,您可以使用bn.fit()
函数学习参数。设置method = "bayes"
使用贝叶斯估计和可选参数iss
确定先验。iss
的定义:"贝叶斯方法用来估计与离散节点相关的条件概率表(CPT)的虚样本量"。
例如,在某个网络中构建二进制根节点 X。bn.fit()
返回(Nx + iss / cptsize) / (N + iss)
作为X = x
的概率,其中N
是样本数,Nx
样本数为X = x
,cptsize
X
的基数;在这种情况下cptsize = 2
因为X
是二进制的。拉普拉斯校正要求iss / cptsize
始终等于 1。然而,bnlearn
对所有 CPT 使用相同的iss
值,如果所有变量具有相同的基数,则iss / cptsize
值仅为 1。因此,对于二进制变量,您确实可以通过设置iss = 2
来进行拉普拉斯校正。但是,在一般情况下,这是不可能的。
有关其他详细信息,请参阅 bnlearn::bn.fit 差分和方法 "mle" 和 "Bayes" 的计算。