Nagarajan 等人。书(R 中的贝叶斯网络,O'Reilly 2013,第 35 页)说,当我使用 R bnlearn 包的标记数据集并要求通过编写使用增长-收缩实现来学习结构时
library(bnlearn)
data(marks)
bn.gs = gs(marks)
那么我应该获得一个有向图:
model: [STAT][ANL|STAT][ALG|ANL:STAT][VECT|ALG] [MECH|VECT:ALG]
nodes: 5
arcs: 6
undirected arcs: 0
directed arcs: 6
取而代之的是,我得到了一个无向图:
model: [undirected graph]
nodes: 5
arcs: 6
undirected arcs: 6
directed arcs: 0
即使我在 gs 方法中添加了 undirected=FALSE 选项,我仍然得到相同的结果。
我究竟做错了什么?还是 R 实现中存在错误?我在 Mac 和 Debian 机器上都试过了,结果是一样的......
最佳答案
作者在他们的网站(我刚刚发现)上提供了答案:http://www.bnlearn.com/book-useR/
“第 35 页:bnlearn 3.2 及更高版本对设置弧线方向更加挑剔;因此 bn.gs 是一个无向图,必须使用 cextend() 扩展到 DAG 才能结束示例。”
换句话说,将最后一行代码替换为
bn.gs = cextend(gs(marks))
遗憾的是 Springer 没有提供勘误的标准服务,例如 O'Reilly。这本书的作者不得不创建自己的网站,我花了一些时间才找到它……
关于R bnlearn Grow-Shrink 结构学习返回无向图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21591220/