我试图复制示例 入门PyMC3.
在Windows 2012 R2上.
这一步
 from pymc3 import Model, Normal, HalfNormal
给出了
D:\Anaconda3\libs/python35.lib: error adding symbols: File in wrong format
collect2.exe: error: ld returned 1 exit status
    ---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
D:\Anaconda3\lib\site-packages\theano\gof\lazylinker_c.py in <module>()
     64         if version != getattr(lazylinker_ext, '_version', None):
---> 65             raise ImportError()
     66 except ImportError:
ImportError: 
During handling of the above exception, another exception occurred:
ImportError                               Traceback (most recent call last)
D:\Anaconda3\lib\site-packages\theano\gof\lazylinker_c.py in <module>()
     81             if version != getattr(lazylinker_ext, '_version', None):
---> …我正在阅读黑客的概率编程和贝叶斯方法.在Ch5中,写的是logp = pm.Normal.dist(mu=price_estimate, sd=(3e3)).logp(true_price).
这是什么?我知道,pm.Normal()但不知道.dist()和.logp().
我使用的是python3.6
当我尝试在 pymc3 中运行 NUTS 采样时,我的 jupyter 笔记本一次又一次崩溃。
我的笔记本电脑有 16gb 和 i7 我认为应该足够了。我在 8GB 和 i7 笔记本电脑上运行了相同的代码,当时它有效。无法弄清楚这个问题是什么。
我已经使用此命令生成了 jupyter 的配置文件
$ jupyter notebook --generate-config
我无法弄清楚需要修改哪个参数来解决这个问题。
这是我正在使用的代码
with pm.Model() as model:
#hyperpriors
home = pm.Flat('home') #flat pdf is uninformative - means we have no idea
sd_att = pm.HalfStudentT('sd_att', nu=3, sd=2.5)
sd_def = pm.HalfStudentT('sd_def', nu=3, sd=2.5)
intercept = pm.Flat('intercept')
# team-specific model parameters
atts_star = pm.Normal("atts_star", mu=0, sd=sd_att, shape=num_teams)
defs_star = pm.Normal("defs_star", mu=0, sd=sd_def, shape=num_teams)
# To allow samples of expressions to …我一直在尝试按照PYMC3上的教程https://pymc-devs.github.io/pymc3/getting_started/,但是当我看到以下代码部分时,我遇到了错误......
from pymc3 import Exponential, T, logtransform, exp, Deterministic
from pymc3.distributions.timeseries import GaussianRandomWalk
with Model() as sp500_model:
    nu = Exponential('nu', 1./10, testval=.1)
    sigma, log_sigma = sp500_model.TransformedVar('sigma', Exponential.dist(1./.02, testval=.1),
                                        logtransform)
    s = GaussianRandomWalk('s', sigma**-2, shape=n)
    volatility_process = Deterministic('volatility_process', exp(-2*s))
    r = T('r', nu, lam=volatility_process, observed=returns)
第一个错误是"无法导入名称logtransform".第二个错误(如果我不尝试加载logtransform)是"'模型'对象没有属性TransformedVar".
我在Windows 7上的IPython Notebook中运行它,我尝试卸载并重新安装PyMC3无济于事.
如何使用Pymc3模拟6面骰子卷?另外,我知道骰子的不同侧面有不同的分布吗?
我使用 DensityDist 分布构建了一个 pymc3 模型。我有四个参数,其中 3 个使用 Metropolis,一个使用 NUTS(这是由 pymc3 自动选择的)。但是,我得到两个不同的 UserWarnings 1.Chain 0 在调整后包含发散样本的数量。如果增加target_accept无济于事,请尝试重新参数化。我可以知道这里重新参数化是什么意思吗?2.链0中的接受概率与目标不匹配。它是 ,但应该接近 0.8。尝试增加调整步骤的数量。
通过一些例子,我使用了“random_seed”、“discard_tuned_samples”、“step = pm.NUTS(target_accept=0.95)”等等,并摆脱了这些用户警告。但是我找不到有关如何确定这些参数值的详细信息。我相信这可能已经在各种上下文中讨论过,但我无法找到可靠的文档。我正在做一个试错法,如下所示。
with patten_study: #SEED = 61290425 #51290425 step = pm.NUTS(target_accept=0.95) trace = sample(step = step)#4000,tune = 10000,step =step,discard_tuned_samples=False)#,random_seed=SEED)
我需要在不同的数据集上运行这些。因此,我正在努力为我使用的每个数据集修复这些参数值。有什么方法可以让我给出这些值或找到结果(如果有任何用户警告,然后尝试其他值)并在循环中运行它?
如果我问一些愚蠢的事情,请原谅我!
您好我想在Windows上的tensorflow版本3.5中安装pymc3
但它没有奏效.
pip install git+https://github.com/pymc-devs/pymc3
tensorflow-tensorboard 1.5.0有要求漂白== 1.5.0,但你会有漂白2.1.2这是不兼容的.tensorflow-tensorboard 1.5.0有html5lib == 0.9999999的要求,但是你的html5lib 1.0.1是不兼容的
我知道ADVI / MCMC之间的数学差异,但是我试图理解使用其中一种的实际含义。我对以这种方式创建的数据运行一个非常简单的logistic回归示例:
import pandas as pd
import pymc3 as pm
import matplotlib.pyplot as plt
import numpy as np
def logistic(x, b, noise=None):
    L = x.T.dot(b)
    if noise is not None:
        L = L+noise
    return 1/(1+np.exp(-L))
x1 = np.linspace(-10., 10, 10000)
x2 = np.linspace(0., 20, 10000)
bias = np.ones(len(x1))
X = np.vstack([x1,x2,bias]) # Add intercept
B =  [-10., 2., 1.] # Sigmoid params for X + intercept
# Noisy mean
pnoisy = logistic(X, B, noise=np.random.normal(loc=0., scale=0., size=len(x1)))
# dichotomize pnoisy …去年我测量了 80 个水果的直径,在检查了这些值的最佳分布之后,我创建了一个 PyMC3 模型
with Model() as diam_model:
    mu = Normal('mu',mu=57,sd=5.42)
    sigma = Uniform('sigma',0,10)
之后,据我所知,我已经用我之前的数据(80 个值)“训练”了模型
with diam_model:
    dist = Normal('dist',mu=mu,sd=sigma, observed=prior_data.values)
with diam_model:
    samples=fit().sample(1000)
然后我用plot_posterior的samples,也返回均值和HPD。
我的想法是今年再次测量使用贝叶斯更新以减少样本量。如何添加单个值并更新后验值,期望 HPD 越来越小?
我正在 pymc3 中进行一些贝叶斯建模,并想使用 plot_posterior(来自 arviz 包)绘制后验分布。结果图在水平轴上笨拙地错位,我想将它移过来精确绘制在 -3 和 +3 之间。不幸的是,我无法确定应该传递给函数来指定它的内容。
arviz.plot_posterior 的文档指定参数“coords”具有定义“要绘制的 var_names 的坐标。传递给 Dataset.sel” 大概这是我需要指定水平轴范围的内容,但它没有告诉我期待什么样的价值。
我已经检查了 Dataset.sel 的文档,它指出它期望的第一个参数是“一个具有与标量、切片或刻度标签数组给出的维度和值相匹配的键的字典”。我对此的解释是,键是与变量名称匹配的字符串,而值是一些可迭代的刻度线结构。
我的变量名为“m”,由以下代码生成:
with pymc3.Model() as m1:
    m = pymc3.Normal('m', mu = 0, sigma = 1)
    obs = pymc3.Normal('obs', mu = m, sigma = 1, observed = numpy.random.randn(3))
    trace = pymc3.sample(1000, tune = 500, cores = 1)
我对 plot_posterior 期望的猜测是:
plot_posterior(trace, coords = {'m': [-3.0, -2,0, -1,0, 0.0, 1.0, 2.0, 3.0]})
它给了我错误“ValueError:维度或多索引级别 ['m'] 不存在”
大概我在正确的轨道上,但我无法挖掘出这个函数需要什么参数的更精确的定义。感谢您的任何帮助,您可以提供。
编辑:我已经研究出如何扩展轴本身(诀窍是 ax = mpl.pyplot.axes(xlim = (-3.0, 3.0)))但我仍然不知道如何扩展变量的绘图本身。
pymc3 ×10
python ×7
bayesian ×3
arviz ×1
gcc ×1
statistics ×1
tensorflow ×1
theano ×1
user-warning ×1
windows-10 ×1