我正在尝试使用R来处理贝叶斯网络,目前我正在使用bnlearn框架。我正在尝试从数据中使用基于分数的结构化学习,并尝试不同的算法和方法。
我想知道在bnlearn中是否实现了拉普拉斯平滑。我在文档中找不到任何关于它的信息。我是不是漏掉了什么?有人知道吗?
发布于 2018-12-13 23:24:20
不,它不是。然而,这应该没有问题,因为在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 difference and calculation of methods "mle" and "bayes"。
https://stackoverflow.com/questions/49282381
复制相似问题