标签: bayesian-networks

Scala中的贝叶斯网络

我正在寻找一个库来创建贝叶斯网络,并在Scala(或Java,在没有更好的解决方案的情况下)对它们进行学习和推理.除非用法非常简单,否则应该积极维护,保持性能,最好是简单,明确的文档.免费,开源和商业替代品都可以,但对于商业解决方案,需要免费试用.

一个理想的解决方案就是微软研究院的.NET世界中的Infer.NET,但更多的文档记录.

提前致谢!

java scala machine-learning bayesian-networks

9
推荐指数
1
解决办法
3212
查看次数

带有R的贝叶斯网络

我正在尝试构建一个贝叶斯网络模型.但是我无法安装合适的包.尝试gRain,bnlearnRgraphviz绘图.我在R 2.15和3.2中尝试过

以下是错误消息:

library(gRain)
Loading required package: gRbase
Loading required package: graph
Error: package ‘graph’ could not be loaded
In addition: Warning message:
In library(pkg, character.only = TRUE, logical.return = TRUE, lib.loc = lib.loc) :
  there is no package called ‘graph’

> install.packages("graph")
Warning message:
package ‘graph’ is not available (for R version 2.15.3) 
Run Code Online (Sandbox Code Playgroud)

R 3.2.1也是如此

> install.packages("graph")
(as ‘lib’ is unspecified)
Warning message:
package ‘graph’ is not available (for R version 3.2.1) 


> …
Run Code Online (Sandbox Code Playgroud)

r bayesian-networks

9
推荐指数
1
解决办法
5058
查看次数

贝叶斯分类器得分代表什么?

我正在使用ruby分类器gem,其分类方法返回针对训练模型分类的给定字符串的分数.

得分是百分比吗?如果是这样,最大差异是100分吗?

ruby bayesian bayesian-networks

8
推荐指数
1
解决办法
2442
查看次数

自由能源强化学习实施

我一直在尝试实现这里描述的算法,然后在同一篇论文中描述的"大动作任务"上测试它.

算法概述:

在此输入图像描述

简而言之,该算法使用下面所示形式的RBM通过改变其权重来解决强化学习问题,使得网络配置的自由能等于为该状态动作对给出的奖励信号.

为了选择动作,算法在保持状态变量固定的同时执行gibbs采样.有足够的时间,这会产生具有最低自由能的动作,因此是给定状态的最高奖励.

大型行动任务概述:

在此输入图像描述

作者的实施指南概述:

具有13个隐藏变量的受限Boltzmann机器在具有12位状态空间和40位动作空间的大动作任务的实例化上被训练.随机选择了13个关键状态.该网络运行了12000次,学习率从0.1到0.01,在整个培训过程中,温度从1.0到0.1呈指数级增长.每个迭代都以随机状态初始化.每个动作选择包括100次Gibbs采样迭代.

重要的遗漏细节:

  • 是否需要偏置单位?
  • 需要减肥吗?如果是这样,L1或L2?
  • 权重和/或激活需要稀疏性约束吗?
  • 是否有梯度下降的修改?(例如动量)
  • 这些额外机制需要哪些元参数?

我的实施:

我最初假设作者没有使用指南中描述的机制,所以我尝试在没有偏置单元的情况下训练网络.这导致了近乎机会的表现,这是我的第一个线索,即使用的某些机制必须被作者视为"显而易见",因此被省略.

我玩了上面提到的各种省略机制,并通过使用以下方式获得了我最好的结果:

  • softmax隐藏单位
  • 动量为.9(.5直到第5次迭代)
  • 隐藏和可见层的偏置单位
  • 学习率是作者列出的1/100.
  • l2重量衰减为.0002

但即使进行了所有这些修改,我在任务上的表现通常在12000次迭代后的平均奖励为28.

每次迭代的代码:

    %%%%%%%%% START POSITIVE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    data = [batchdata(:,:,(batch)) rand(1,numactiondims)>.5];
    poshidprobs = softmax(data*vishid + hidbiases);

    %%%%%%%%% END OF POSITIVE PHASE  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    hidstates = softmax_sample(poshidprobs);

    %%%%%%%%% START ACTION SELECTION PHASE  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    if test
        [negaction poshidprobs] = choose_factored_action(data(1:numdims),hidstates,vishid,hidbiases,visbiases,cdsteps,0);
    else
        [negaction poshidprobs] = choose_factored_action(data(1:numdims),hidstates,vishid,hidbiases,visbiases,cdsteps,temp);
    end


    data(numdims+1:end) = negaction > rand(numcases,numactiondims);


    if mod(batch,100) == 1
        disp(poshidprobs);
        disp(min(~xor(repmat(correct_action(:,(batch)),1,size(key_actions,2)), key_actions(:,:))));
    end

    posprods …
Run Code Online (Sandbox Code Playgroud)

matlab artificial-intelligence machine-learning bayesian-networks reinforcement-learning

8
推荐指数
1
解决办法
1283
查看次数

信仰传播实施

我正在尝试实施贝叶斯网络.

我的主图是我想用于信念传播的因子图.但是,在计算消息时的置信传播中,并非所有参数都传递给函数,最终函数将是联合分布的限制.

我想到的最好的方法是以某种方式限制函数,以便每当我想为新值计算边际值时不进行所有替换.

我问过如何在这里实现这样的功能.

我想知道是否有更好的方法来做这样的事情,或者是否有比我想做的更简单快捷的方法.

python bayesian-networks belief-propagation

8
推荐指数
1
解决办法
2643
查看次数

pymc警告:value既不是数字也不是带有浮点dtype的数组

我有一个贝叶斯网(DAG)模型,我使用pymc 2.3创建.其中的所有变量都是伯努利随机变量.当我在采样之前调用它上面的MAP.fit()方法时,我得到所有随机变量的以下警告:

value is neither numerical nor array with floating-point dtype. Recommend fitting method fmin (default)
Run Code Online (Sandbox Code Playgroud)

从pymc的github repo中,如果随机变量的基础类型不是浮点数,似乎会打印此警告.对于伯努利RV来说,类型是(并且应该是)bool.

这是否意味着MAP步骤会产生不稳定的结果?

python bayesian-networks pymc

8
推荐指数
0
解决办法
176
查看次数

如何在SQL中建模贝叶斯网络,或者更一般地说是有向加权图?

我在网上发现了一些文章,提供了如何在SQL中对各种图形(特别是DAG)进行建模的示例,但考虑到它们的建模相对简单,它们看起来都非常复杂.

这样做有最佳/标准的方法吗?我目前的想法是这样的:

create table node (
  id int not null auto_increment,
  name TEXT
)

create table edge (
  from_node int not null,
  to_node int not null,  
  weight float
) 
Run Code Online (Sandbox Code Playgroud)

那有什么不对吗?任何人都知道更好(更强大,也许)的方式?

mysql sql graph-theory bayesian-networks

7
推荐指数
1
解决办法
1654
查看次数

如何使用WEKA API学习贝叶斯网络(结构+参数)?

有没有人知道使用WEKA API从数据中学习贝叶斯网络的"正确"程序?我在WEKA文档中找不到好的说明.

基于文档和每个函数"应该"做什么,我认为这将工作:

Instances ins = DataSource.read( filename );
ins.setClassIndex(0);

K2 learner = new K2();

MultiNomialBMAEstimator estimator = new MultiNomialBMAEstimator();
estimator.setUseK2Prior(true);

EditableBayesNet bn = new EditableBayesNet( ins );
bn.initStructure();

learner.buildStructure(bn, ins);
estimator.estimateCPTs(bn);
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.我已经尝试了这个和其他变化,我一直在WEKA代码中ArrayIndexOutOfBoundsException或者NullPointerException某个地方,所以我错过了什么?

java api bayesian-networks weka

7
推荐指数
1
解决办法
3675
查看次数

使用Google Go的Goroutines创建贝叶斯网络

我有一个大的哲学论证数据集,每个参数都连接到其他参数作为给定语句的证明或反证.根声明可以有许多证明和反证,每个都可能有证明和反证.语句也可用于多个图形,并且可以在"给定上下文"或假设下分析图形.

我需要构建一个相关参数的贝叶斯网络,以便每个节点公平准确地传播影响它的连接参数; 我需要能够同时计算连接节点链的概率,每个节点都需要数据存储区查找,必须阻止才能获得结果; 该进程主要是I/O绑定,我的数据存储连接可以在java,go和python {google appengine}中异步运行.每次查找完成后,它会将效果传播到所有其他连接节点,直到概率增量低于不相关阈值{当前为0.1%}.进程的每个节点必须计算连接链,然后总结所有查询中的所有结果以调整有效性结果,结果向外链接到任何连接的参数.

为了避免无限重复,我想在goroutines中使用类似A*的过程将更新传播到参数映射,使用基于复合影响的启发式方法,一旦影响概率低于0.1%,就会忽略节点.我曾尝试使用SQL触发器设置计算,但它过于复杂和混乱.然后我转移到谷歌appengine利用异步nosql,它更好,但仍然太慢.我需要足够快地运行更新以获得快速的UI,因此当用户创建或投票赞成或反对证明或反证时,他们可以立即看到结果反映在UI中.

我认为Go是支持我需要的并发性的首选语言,但我愿意接受建议.客户端是一个单片的javascript应用程序,它只使用XHR和websockets实时推送和拉出参数映射{及其更新}.我有一个可以在10到15秒内计算大型链的java原型,但是对性能的监控表明我的大部分运行时都浪费在ConcurrentHashMap的同步和开销上.

如果还有其他高度并发的语言值得尝试,请告诉我.我知道java,python,go,ruby和scala,但如果它符合我的需要,它会学习任何语言.

同样,如果有大型贝叶斯网络的开源实现,请留下建议.

google-app-engine a-star bayesian go bayesian-networks

7
推荐指数
1
解决办法
672
查看次数

在循环中使用bnlearn函数"cpquery"

我正在尝试使用bnlearn 来计算条件概率,并且当在循环中使用"cpquery"函数时我遇到了问题.我已经使用包中包含的数据创建了一个示例,如下所示.在循环中使用cpquery函数时,函数无法识别循环中创建的变量(示例中为"evi").我收到错误:

Error in parse(text = evi) : object 'evi' not found
Run Code Online (Sandbox Code Playgroud)

"evi"的创建步骤基于作者提供的示例.

你能提供的任何帮助都会很棒.我迫切希望找到一种可以将cpquery函数应用于大量观察的方法.

library(bnlearn)
data(learning.test)
fitted = bn.fit(hc(learning.test), learning.test)

bn.function <- function(network, evidence_data) {
  a <- NULL
  b <- nrow(evidence_data)
  for (i in 1:b) {
    evi <- paste("(", names(evidence_data), "=='",
               sapply(evidence_data[i,], as.character), "')",
               sep = "", collapse = " & ")
    a[i] <- cpquery(network, (C=='c'), eval(parse(text=evi)))
  }
  return(a)
}

test <- bn.function(fitted, learning.test)
Run Code Online (Sandbox Code Playgroud)

提前致谢!

r probability bayesian-networks

6
推荐指数
1
解决办法
1450
查看次数