我正在玩实现用于贝叶斯网络上的置信度传播的连接树算法.我在对图形进行三角测量时遇到了一些困难,因此可以形成连接树.
我知道找到最优的三角剖分是NP完全的,但是你能指出一个通用算法,它可以为相对简单的贝叶斯网络产生"足够好"的三角剖分吗?
这是一个学习练习(爱好,不是家庭作业),所以我不太关心空间/时间的复杂性,只要算法导致给定任何无向图的三角图.最后,我试图在我尝试进行任何近似之前理解精确推理算法的工作原理.
我正在使用NetworkX修补Python,但使用典型的图遍历术语的这种算法的任何伪代码描述都是有价值的.
谢谢!
如何使用pymc参数化概率图形模型?
假设我有两个节点的PGM X和Y.让我们说X->Y是图表.
并且X采用两个值{0,1},并且
Y还采用两个值{0,1}.
我想使用pymc来学习分布的参数,并用它来填充图形模型以进行推理.
我能想到的方式如下:
X_p = pm.Uniform("X_p", 0, 1)
X = pm.Bernoulli("X", X_p, values=X_Vals, observed=True)
Y0_p = pm.Uniform("Y0_p", 0, 1)
Y0 = pm.Bernoulli("Y0", Y0_p, values=Y0Vals, observed=True)
Y1_p = pm.Uniform("Y1_p", 0, 1)
Y1 = pm.Bernoulli("Y1", Y1_p, values=Y1Vals, observed=True)
Run Code Online (Sandbox Code Playgroud)
这里Y0Vals是Y对应于X值= 0 Y1Vals的值,并且是Y对应于X值= 1的值.
计划是从这些中抽取MCMC样本,并使用Y0_p和Y1_p
填充离散贝叶斯网络的概率...所以概率表适用P(X) = (X_p,1-X_p)于P(Y/X):
Y 0 …Run Code Online (Sandbox Code Playgroud) 如何通过修复它的参数来创建比原始维度更小的维度的函数:
例如,我想用sum函数制作后继函数,如下所示:
def add(x,y):
return x+y
Run Code Online (Sandbox Code Playgroud)
现在我正在寻找这样的东西:
g = f(〜,1),它将是后继函数,即g(x)= x + 1.
python function bayesian-networks argument-passing belief-propagation
我正在尝试使用bnlearn在R中绘制一个Bsyesian网络。这是我的R代码
library(bnlearn)
library(Rgraphviz)
first_variable <- rnorm(100)
second_variable <- rnorm(100)
third_variable <- rnorm(100)
v <- data.frame(first_variable,second_variable,third_variable)
b <- hc(v)
hlight <- list(nodes = nodes(b), arcs = arcs(b),col = "grey", textCol = "red")
pp <- graphviz.plot(b, highlight = hlight)
Run Code Online (Sandbox Code Playgroud)
上面的代码可以工作,但是情节中文本的大小比我预期的要小得多。这里是:
我认为这是因为我的变量名很长。在我的真实数据中,变量名称甚至更长。这是我的真实数据集的BN图:
有什么办法可以增加图中文字的大小吗?
我很困惑为什么马尔可夫毯子包含孩子的父母.维基百科说
它的孩子的父母也必须被包括在内,因为他们可以用来解释有问题的节点.
但是什么the node in question?我还从BayesiaLab找到了另一个信息.它说
配偶(或共同父母,深绿色)用于切割来自儿童的后裔(蓝色节点)的信息.目标节点略微独立于配偶,但有条件依赖,即当儿童可获得某些证据时.
为什么目标节点和配偶在有关儿童的证据时会变得有条件依赖?儿童可获得一些证据是什么意思?
我希望有人可以帮助澄清它,尤其是.用一个具体的例子.谢谢:)
当不使用 KL 散度项时,VAE 几乎完美地重建了 mnist 图像,但在提供随机噪声时无法正确生成新图像。
当使用 KL 散度项时,VAE 在重建和生成图像时给出相同的奇怪输出。
这是损失函数的pytorch代码:
def loss_function(recon_x, x, mu, logvar):
BCE = F.binary_cross_entropy(recon_x, x.view(-1, 784), size_average=True)
KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
return (BCE+KLD)
Run Code Online (Sandbox Code Playgroud)
recon_x 是重建图像,x 是 original_image,mu 是均值向量,而 logvar 是包含方差对数的向量。
这里出了什么问题?提前致谢 :)
bayesian-networks autoencoder deep-learning pytorch loss-function
我正在寻找一个用Java编写的开源NaïveBayes分类器库.非常感谢找到一个帮助.
NaïveBayes分类器与贝叶斯网络相同吗?
我试图了解这两种方法之间的差异bayes以及包mle的bn.fit功能bnlearn。
我知道频率论者和贝叶斯方法之间关于理解概率的争论。在理论上,我认为最大似然估计mle是一种简单的频率论方法,将相对频率设置为概率。但是进行了哪些计算才能得到bayes估计值?我已经查看了bnlearn 文档、bn.fit 函数的描述和一些应用示例,但没有任何地方对正在发生的事情进行真正的描述。
我还尝试通过首先检出bnlearn::bn.fit、导致bnlearn:::bn.fit.backend、导致来理解 R 中的函数,bnlearn:::smartSapply但后来我被卡住了。
当我将软件包用于学术工作时,我会非常感谢您的帮助,因此我应该能够解释会发生什么。
我正在学习OpenCV的基础知识,我认为一个好的项目可以帮助我让学习变得更有趣.在思考了一些想法之后,我想出了一些物质识别项目.比方说,我给自己做了一台输送机,它正在运输用于生产某种产品的材料(这个产品并不重要,所以).有3种材料,照明条件会有所不同(早上到下午使用自然光,晚上使用灯泡).这将是问题描述.
我正在考虑使用容易获得的沙子,木头和岩石.并将它们放在塑料表面上.在拍完照片之后,我将应用一些直方图来获得颜色,并使用这种颜色我将识别材料.但是,由于闪电条件会随着时间的推移而变化,当我拍摄这张照片并应用直方图时,颜色会发生变化,材料将无法正确识别.而且我想,如果我使用沙子和灰尘,他们有非常相似的颜色,但不同的质地,有什么东西可以帮助我吗?
我只是想要一些想法,也许该领域的一些专家可以指导我.
我正在尝试自定义bnlearn使用图表学习的图表RGraphviz.当我有无向边时,RGraphviz当我尝试自定义图形的外观时,将它们转向两个方向的有向边.
一个可重复的例子可能是:
set.seed(1)
x1 = rnorm(50, 0, 1)
x2 = rnorm(50, 0, 1)
x3 = x2 + rnorm(50, 0, 1)
x4 = -2*x1 + x3 + rnorm(50, 0, 1)
graph = data.frame(x1, x2, x3, x4)
library(bnlearn)
library(Rgraphviz)
res = gs(graph)
options(repr.plot.width=3, repr.plot.height=3)
g1 <- graphviz.plot(res)
Run Code Online (Sandbox Code Playgroud)
图未定制:
到现在为止还挺好.但是,如果我尝试自定义它:
plot(g1, attrs = list(node = list(fontsize=4, fillcolor = "lightgreen")))
Run Code Online (Sandbox Code Playgroud)
自定义图表
无向边缘被转换.
即使我只使用情节(g1),我也会遇到这个问题.问题是这(保存g1然后使用绘图)似乎改变了图形的外观.
bnlearn ×3
r ×3
bayesian ×2
python ×2
algorithm ×1
autoencoder ×1
function ×1
graph-theory ×1
java ×1
material ×1
mle ×1
open-source ×1
opencv ×1
pymc ×1
pymc3 ×1
pytorch ×1
r-graphviz ×1
size ×1
text ×1