问题标签 [bnlearn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1178 浏览

python - 将 R 包中的任何函数导入 python

在使用 Python 的 rpy2 库与 R 一起工作时。我在尝试导入 bnlearn 包的函数时收到以下错误消息

出现错误:

0 投票
1 回答
176 浏览

r - 我应该将 R 包 BNlearn 用于我的数据的交叉验证中的什么损失函数?

StackOverflow 和 R 的新手。

我有一个关于 R 包 BNlearn 中提供的用于交叉验证的不同损失函数以及我应该使用哪一个的问题。我有 32 行 8 列的连续数据(下面的示例),每列代表一个物种,每一行代表该物种当年的个体数量。

到目前为止,我已经使用禁忌搜索制作了一个固定的网络结构,并使用交叉验证命令对其进行了分析

bn.cv(data = data, bn = bn.tabu, method = "k-fold", k = 10, runs = 100)

这给出了结果

问题是,我应该对我的数据使用什么损失函数,以便我可以更改我使用的数据集并获得可比较的结果,以及“运行中的平均损失”是什么意思?最终的游戏是进行联合概率分布和一年 + 1 的预测,所以基本上是第 33 行,其中包含数字及其概率分布。

很抱歉有任何不一致之处,因为我还在学习统计数据。

0 投票
0 回答
71 浏览

r - 在贝叶斯 Newtork 中计算无条件概率

bnlearn 包可以计算每个节点的无条件概率吗?例如,在一个简单的情况下,如果我们有三个节点 A,S ---> E:

所有 bnlearn 命令(例如,E.prob)都显示条件概率?如果我想计算 P(E=high),我必须添加以下内容:

P(E=高)=0.745。但是,庞大的网络是不可能的!

0 投票
2 回答
250 浏览

r - 在 R 中使用 bnstruct 为动态贝叶斯网络设置层

我目前正在使用 R 中的 bnstruct 包创建 DBN。每 6 个时间步长有 9 个变量。我有生物和非生物变量。我想防止生物变量成为非生物变量的父母。对于贝叶斯网络,使用例如layering = c(1,1,2,2,2)learn.dynamic.network().

但是动态部分出现了一个问题:我想在每个时间步中继续防止生物变量成为非生物变量的父母,同时防止从 t+1 到 t 的任何变量之间出现边。

如果我使用layering =

  • 1 用于 t1 的非生物变量
  • 2 用于 t1 的生物变量
  • 3 用于 t2 的非生物变量
  • 4 用于 t2 的生物变量...

我允许来自 t-1 的生物变量来解释 t 处的非生物变量(我不希望这样)。

所以我尝试了:

所以现在,我没有从生物到非生物的任何边缘(这很好),但我有从 variable_t(n+1) 到 variable_t(n) 的边缘。

我知道bnlearn您可以创建一个您不想看到的边缘“黑名单”,但我在 bnstruct 中看不到任何等效参数。任何的想法?

0 投票
0 回答
60 浏览

r - Bnlearn 内存不足

我在使用 bnlearn 包的结构学习算法时遇到了内存问题。具体来说,我注意到基于分数的方法(例如 hc 和禁忌)使用大量内存——尤其是在给定非空起始网络时。

内存使用不会成为问题,除了它会不断降低我的笔记本电脑(16GB RAM)和我正在使用的虚拟机(128GB RAM),但有问题的数据集是一个离散的 BN,有 41 个节点和 ~250行(内存中 69KB)。当使用 16GB RAM 顺序运行和在 VM(32GB/核心)上并行运行时,都会出现此问题。

最后一点细节:有时我可以让 100-200 个随机启动的网络成功运行,但随后一个网络会随机变得太大而导致系统崩溃。

我的问题:我对 BN 比较陌生,所以这只是该方法固有的还是包的内存管理问题?

0 投票
0 回答
1687 浏览

python - 贝叶斯网络:与 R 相比,Python 中的结构学习非常慢

我目前正在研究使用贝叶斯网络对图像进行图像分类的问题。我试过使用pomegranate,pgmpybnlearn. 我的数据集包含超过 200,000 张图像,我在这些图像上执行了一些特征提取算法并获得了大小为 1026 的特征向量。

pgmpy

石榴

学习

用 R编写的程序在bnlearn几分钟内完成运行,而pgmpy运行数小时,石榴在几分钟后冻结了我的系统。您可以从我的代码中看到,我提供了前 20 行,用于在这两个程序中进行训练,同时pgmpy获取整个数据帧。由于我在 python 中进行所有图像预处理和特征提取,因此我很难在 R 和 python 之间切换进行训练。pomegranatebnlearn

我的数据包含从 0 到 1 的连续值。我还尝试将数据离散化为 0 和 1,但这并没有解决问题。

有什么方法可以加快这些 python 包的训练速度,还是我的代码做错了什么?

感谢您提前提供任何帮助。

编辑:

https://drive.google.com/file/d/1HbAqDQ6Uv1417zPFMgWBInC7-gz233j2/view?usp=sharing

这是具有 300 列和约 40000 行的数据集。如果您想尝试重现输出。

0 投票
1 回答
288 浏览

r - 对数据集中的几对使用 cpquery 函数

我是 R 的相对初学者,并试图弄清楚如何将 cpquery 函数用于 DAG 的所有边缘的 bnlearn 包。

首先,我创建了一个bn对象、一个bn网络和一个具有所有优势的表。

然后我尝试在sttbl数据集中创建一个新变量,这是 cpquery 函数的结果。

它看起来相当不错(尤其是在更大的数据上),但是当我试图以某种方式自动化这个过程时,我正在努力解决错误,例如:

采样错误(拟合 = 拟合,事件 = 事件,证据 = 证据,:证据的逻辑向量长度为​​ 1 而不是 10000。

在完美的情况下,我需要创建一个函数来填充sttbl数据集的概率生成变量,而不管它的大小。我试图用for循环来做,但一次又一次地偶然发现上面的错误。不幸的是,我正在删除失败的尝试,但它们是这样的:

或这个:

现在我想我误解了 R 或 bnlearn 包中的一些东西。

您能否告诉我如何通过多个 cpqueries 填充列来实现此任务?这对我的研究有很大帮助!

0 投票
1 回答
228 浏览

r - 如何从 bnlearn 库更改 bn.fit 类(bn.fit.dnet)对象中的概率表?

我尝试从 R 的库中修改类bn.fit( ) 的对象。我需要bn.fit.dnetbnlearn

  1. 为 bn.fit$node$prob 表中的每一行设置相等的概率。为此,我使用下一个代码:

我认为这种方法有点难看,几乎可以肯定存在更优雅的方法来做到这一点。我无法删除1:length(bn_fit)。另外我不知道为什么我不能在我的代码中NROW(.x)使用。NROW(node$prob)

  1. bn.fit$node$prob表中的每一列上设置任意分布。在这种情况下,我不明白如何避免 for 循环。

相关问题在这里

0 投票
1 回答
77 浏览

r - 为什么我收到在此函数中找不到的“对象”?

这给了我“找不到对象 arg1”,但是当我在cpquery()外面使用该函数时,它工作得很好。

没有 query_averager 函数的工作代码:

我相信其他变量是什么并不重要,主要问题是为什么:

有效,下面的代码段无效:

0 投票
0 回答
109 浏览

r - 为什么函数:得分返回错误:无法找到签名“bn”的函数“得分”的继承方法