我正在尝试使用R与贝叶斯网络合作,目前我正在使用getSchema()
框架。
我正在尝试从数据中使用基于分数的结构学习,并尝试不同的算法和方法。
我想知道是否在Optional<Schema>
中实现了拉普拉斯平滑。我在文档中找不到任何有关它的信息。我错过了什么吗?有谁知道吗?
答案 0 :(得分:0)
不,不是。但是,这应该没问题,因为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的情况下才为1。相同的基数。因此,对于二进制变量,您确实可以通过设置iss = 2
来进行Laplace校正。但是,在一般情况下,这是不可能的。
有关其他详细信息,请参见bnlearn::bn.fit difference and calculation of methods "mle" and "bayes"。