拉普拉斯smoothig为贝叶斯Netoworks在bnlearn

时间:2018-03-14 15:57:33

标签: r bayesian bayesian-networks bnlearn

我正在尝试使用R与贝叶斯网络合作,目前我正在使用getSchema()框架。 我正在尝试从数据中使用基于分数的结构学习,并尝试不同的算法和方法。

我想知道是否在Optional<Schema>中实现了拉普拉斯平滑。我在文档中找不到任何有关它的信息。我错过了什么吗?有谁知道吗?

1 个答案:

答案 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"