问题标签 [bayesian-networks]
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.
java - Scala 中的贝叶斯网络
我正在寻找一个库来创建贝叶斯网络并在 Scala(或 Java,如果缺乏更好的解决方案)中对它们进行学习和推理。该库应该被积极维护,高性能,最好是简单的,绝对有据可查,除非使用非常简单。免费、开源和商业替代方案都可以,但对于商业解决方案,需要免费试用。
一个理想的解决方案相当于 .NET 世界中由 Microsoft Research 提供的 Infer.NET,但有更多文档。
提前致谢!
statistics - 段落:用法示例
有没有人用过Passage,并行采样器生成器?
它可能对我非常有用,但我发现的唯一文档是 Github (https://github.com/cscherrer/passage) 上的三行 README,以及 Hackage 上的简洁 API。
一个简单的例子来说明如何运行它会很棒!
probability - 为什么 v 结构对概率影响的流动没有贡献?
我最近浏览了一个视频,它说在关系 x->W<-Y 中,X 不影响 yX 与 W 有因果关系,W 与 Y 有证据关系。那么 X 不会影响 Y 吗?
java - 使用 Java 的贝叶斯网络 API
是否有任何 API 用于使用 java 构建影响图的贝叶斯网络?
data-mining - 决策树与朴素贝叶斯分类器
我正在对不同的数据挖掘技术进行一些研究,并遇到了一些我无法弄清楚的事情。如果有人有任何想法,那就太好了。
在哪些情况下使用决策树更好,而在其他情况下使用朴素贝叶斯分类器更好?
为什么在某些情况下使用其中之一?而另一个在不同的情况下?(通过查看其功能,而不是算法)
有人对此有一些解释或参考吗?
probability - 贝叶斯网络的设计:理解“状态”和“节点”的区别
我正在使用“Hugin Lite”程序设计一个小型贝叶斯网络。问题是我很难理解“节点”(视觉圈)和“状态”(女巫是节点的“领域”)之间的区别。
我会写一个很清楚的例子,另一个我看不懂的例子。
我理解的例子:
有两个女人(W1和W2)和一个男人(M)。
M得到一个W1的孩子。孩子的名字是:C1
然后M 得到一个W2 的孩子。孩子的名字是:C2
生成的网络是:
每个节点 (W1,W2,M,C1,C2) 的四种可能状态是:
- AA:这个人有两个基因“A”
- Aa/aA:这个人有一个基因“A”和一个基因“a”
- aa:这个人有两个基因“a”
现在我无法理解的示例:
给出的数据:
- 一个人在国外(旅行)时的总付款(授权与否):5%(当然,95%的交易是在本国进行的交易)
- 旅行时未授权付款:1%
- 在本国未授权付款:0.2%
- 在本国和外国公司的未授权付款:10%
- 在本国和外国公司的授权付款:1%
- 旅行和前往外国时的总(授权或未授权)付款:90%
我画的如下。
但我不确定它是否正确。你怎么看?然后我应该为每个节点完成一个“概率表”。但是我应该写什么呢?
概率表:
非常感谢有关网络正确性以及如何填写表格的任何提示。
google-app-engine - 使用 Google Go 的 Goroutines 创建贝叶斯网络
我有一个哲学论据的大型数据集,每个论据都与其他论据相连,作为对给定陈述的证明或反证。一个根语句可以有许多证明和反证,每一个也可能有证明和反证。语句也可以用在多个图表中,并且可以在“给定上下文”或假设下分析图表。
我需要构建一个相关参数的贝叶斯网络,以便每个节点将影响公平准确地传播到它的连接参数;我需要能够同时计算连接节点链的概率,每个节点都需要数据存储查找,必须阻塞才能获得结果;该过程主要受 I/O 限制,我的数据存储连接可以在 java、go 和 python {google appengine} 中异步运行。每次查找完成后,它会将效果传播到所有其他连接的节点,直到概率增量降至不相关阈值以下{当前为 0.1%}。该过程的每个节点都必须计算连接链,然后将所有查询中的所有结果求和以调整有效性结果,并将结果向外链接到任何连接的参数。
为了避免无限重复,我正在考虑在 goroutines 中使用类似 A* 的过程来传播参数映射的更新,使用基于复合影响的启发式算法,一旦影响概率下降到 0.1% 以下,就会忽略节点。我曾尝试使用 SQL 触发器来设置计算,但它变得复杂和混乱的方式太快了。然后我转到google appengine来利用异步nosql,它更好,但仍然太慢。我需要以足够快的速度运行更新以获得一个简洁的 UI,因此当用户创建或投票赞成或反对证明或反驳时,他们可以立即看到结果反映在 UI 中。
我认为 Go 是支持我需要的并发性的首选语言,但我愿意接受建议。客户端是一个单一的 JavaScript 应用程序,它只使用 XHR 和 websockets 来实时推送和拉取参数映射{及其更新}。我有一个 java 原型,可以在 10~15 秒内计算出大型链,但对性能的监控表明,我的大部分运行时间都浪费在了同步和 ConcurrentHashMap 的开销上。
如果还有其他高并发语言值得尝试,请告诉我。我知道 java、python、go、ruby 和 scala,但如果适合我的需要,我会学习任何语言。
同样,如果有大型贝叶斯网络的开源实现,请留下建议。
matlab - 免费能源强化学习实施
我一直在尝试实现此处描述的算法,然后在同一篇论文中描述的“大型动作任务”上对其进行测试。
算法概述:
简而言之,该算法使用如下所示形式的 RBM 通过更改其权重来解决强化学习问题,使得网络配置的自由能等于为该状态动作对给出的奖励信号。
为了选择一个动作,该算法在保持状态变量固定的同时执行吉布斯采样。如果有足够的时间,这会产生具有最低自由能的动作,从而产生给定状态的最高奖励。
大动作任务概述:
作者的实施指南概述:
具有 13 个隐藏变量的受限玻尔兹曼机在具有 12 位状态空间和 40 位动作空间的大型动作任务的实例化上进行了训练。随机选择了 13 个关键状态。该网络运行了 12000 个动作,学习率从 0.1 到 0.01,温度从 1.0 到 0.1 在训练过程中呈指数增长。每次迭代都以随机状态初始化。每个动作选择由 100 次 Gibbs 抽样迭代组成。
重要省略的细节:
- 是否需要偏置单元?
- 需要减重吗?如果是这样,L1 还是 L2?
- 权重和/或激活是否需要稀疏约束?
- 梯度下降是否有修改?(例如动量)
- 这些附加机制需要哪些元参数?
我的实现:
我最初假设作者没有使用指南中描述的机制,所以我尝试在没有偏差单元的情况下训练网络。这导致了近乎偶然的表现,并且是我的第一个线索,即使用的某些机制必须被作者认为是“显而易见的”,因此被忽略了。
我玩弄了上面提到的各种省略的机制,并通过使用获得了最好的结果:
- softmax 隐藏单元
- 0.9 的动量(0.5 直到第 5 次迭代)
- 隐藏层和可见层的偏置单元
- 学习率是作者列出的学习率的 1/100。
- l2 重量衰减 0.0002
但即使进行了所有这些修改,在 12000 次迭代后,我在任务上的表现通常在平均奖励 28 左右。
每次迭代的代码:
我要的是什么:
所以,如果你们中的任何人都能让这个算法正常工作(作者声称在 12000 次迭代后平均获得约 40 个奖励),我将非常感激。
如果我的代码似乎在做一些明显错误的事情,那么引起注意也将构成一个很好的答案。
我希望作者遗漏的内容对于比我有更多基于能量的学习经验的人来说确实是显而易见的,在这种情况下,只需指出工作实施中需要包含的内容。
machine-learning - 这种情况下合适的机器学习算法是什么?
我正在研究一个看起来像这样的机器学习问题:
输入变量
输出变量
我面临的主要问题是输出变量并不完全相互独立,并且它们之间没有可以建立的关系。也就是说,存在依赖关系,但不是由于因果关系(一个值高并不意味着另一个值也会很高,但另一个值更高的机会会提高)
一个例子是:
v - 广告展示次数
x - 广告点击次数
y - 转化次数
z - 收入
现在,要点击广告,它必须首先出现在搜索中,因此点击在某种程度上取决于印象。
同样,对于要转换的广告,它必须首先被点击,所以转换在某种程度上依赖于点击。
因此,运行 4 个预测每个输出变量的问题实例对我来说没有意义。事实上,应该有某种方法来预测所有 4 个一起处理它们的隐式依赖关系。
但是正如您所看到的,不会有直接的关系,实际上会有一个涉及但无法手动计算的概率。
加上输出变量不是分类的,但实际上是离散的和连续的。
关于如何解决这个问题的任何意见。还指导我了解相同的现有实现以及使用哪个工具包来快速实现解决方案。
只是一个随机猜测 - 我认为贝叶斯网络可以解决这个问题。你怎么看 ?
matlab - BNT gaussian_CPD 的简单示例/用例?
我正在尝试使用 BNT 和 MATLAB 实现朴素贝叶斯分类器。到目前为止,我一直坚持使用简单的tabular_CPD
变量和变量的“猜测”概率。到目前为止,我的原型网络包括以下内容:
这里变量 1 是我想要的输出变量,设置为最初为任一输出类分配 0.5 的概率。
变量 2-5 定义了我测量的特征的 CPD:
- 2 是一个簇大小,范围从 1 到十几个或更多
- 3 是一个实际值 >= 1 的比率
- 4 和 5 是标准偏差(实际)值(X 和 Y 散点图)
为了对候选集群进行分类,我将所有特征测量值分成 3-4 个范围括号,如下所示:
考虑到我只是在猜测范围括号和概率值,这实际上效果很好。但我相信我应该在这里使用的是gaussian_CPD
. 我认为agaussian_CPD
可以学习最优括号和概率(作为均值和协方差矩阵和权重)。
我的问题是,我没有找到任何关于如何使用 BNT类的简单示例。gaussian_CPD
例如,我将如何将 a 初始化为与上述变量gaussian_CPD
之一大致相同的行为?tabular_CPD