标签: pymc3

PyMC:隐马尔可夫模型

PyMC在其当前可用版本中如何适合用于连续发射HMM建模?

我对建立一个框架很感兴趣,在该框架中我可以轻松探索模型的变化,而不必更新E步骤和M步骤,并且无需为每次对模型所做的更改进行动态编程递归。

更具体的问题是:

  • 在PyMC中为HMM建模时,我可以回答人们想解决的“典型”任务吗?即,除了参数估计之外,还可以推断出最可能的序列(通常用维特比算法完成),或者解决平滑问题?
  • 与使用Expectation Maximization的实现相比,我希望基于采样的方法会更慢。如果这样可以使我在模型构建方面更具灵活性,那很好。我可以想象使用PyMC进行原型设计。不过,我想知道,是否可以期望PyMC在超过10k观测值的模型中在任何合理的时间内完成推断。
  • 您是否建议从PyMC2或PyMC3开始进行模型构建。我知道推理引擎在版本之间会发生变化,因此我尤其想知道哪种类型的采样器可能更适合。

如果您认为PyMC在我的用例中不是一个很好的选择,那肯定也可以作为答案。

probability pymc pymc3

5
推荐指数
0
解决办法
535
查看次数

访问PyMC3中随机变量的值

在PyMC2中,有方法random()和value()来生成随机值,并获得随机变量的当前值.有没有办法在PyMC3中做同样的事情?

p = pm.Dirichlet('p', theta=np.array([1., 1., 1.]))
p.random()
p.value
Run Code Online (Sandbox Code Playgroud)

python pymc pymc3

5
推荐指数
1
解决办法
835
查看次数

如何使用pymc参数化概率图模型?

如何使用pymc参数化概率图形模型?

假设我有两个节点的PGM XY.让我们说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)

这里Y0ValsY对应于X值= 0 Y1Vals的值,并且是Y对应于X值= 1的值.

计划是从这些中抽取MCMC样本,并使用Y0_pY1_p 填充离散贝叶斯网络的概率...所以概率表适用P(X) = (X_p,1-X_p)P(Y/X):

  Y  0 …
Run Code Online (Sandbox Code Playgroud)

bayesian-networks pymc pymc3 probabilistic-programming

5
推荐指数
0
解决办法
414
查看次数

在PYMC3中求解ODE

在这里,我的目的是估算由下式给出的阻尼谐波振荡器的参数(伽马和ω)

dX ^ 2 / dt ^ 2 +γ* dX / dt +(2 * pi * omega)^ 2 * X = 0。(我们可以向系统中添加高斯白噪声。)


 import pymc
 import numpy as np
 import scipy.io as sio
 import matplotlib.pyplot as plt; 
 from scipy.integrate import odeint

 #import data
 xdata = sio.loadmat('T.mat')['T'][0]  #time
 ydata1 = sio.loadmat('V1.mat')['V1'][0]  #  V2=dV1/dt, (X=V1),
 ydata2 = sio.loadmat('V2.mat')['V2'][0]  # dV2/dt=-(2pi*omega)^2*V1-gama*V2

 #time span for solving the equations
 npts= 500   
 dt=0.01
 Tspan=5.0
 time = np.linspace(0,Tspan,npts+1) 

 #initial condition
 V0 = [1.0, 1.0]

# Priors for unknown …
Run Code Online (Sandbox Code Playgroud)

python porting pymc pymc3 probabilistic-programming

5
推荐指数
1
解决办法
650
查看次数

定制Theano Op进行数值积分

我正在尝试编写一个自定义的Theano Op,它在数值上集成了两个值之间的函数.Op是PyMC3的自定义可能性,涉及一些积分的数值计算.我不能简单地使用@as_op装饰器,因为我需要使用HMC来执行MCMC步骤.任何帮助将不胜感激,因为这个问题似乎已经走到了好几次,但一直没有得到解决(如/sf/ask/2579711081/,Theano:实现一个积分函数).

显然,一种解决方案是在Theano中编写一个数值积分器,但是当非常好的积分器已经可用时,这似乎是浪费精力,例如通过scipy.integrate.

为了保持这个最小的例子,让我们尝试在Op中集成0到1之间的函数.以下在Op之外集成了Theano函数,并且在我的测试已经消失的情况下产生了正确的结果.

import theano
import theano.tensor as tt
from scipy.integrate import quad

x = tt.dscalar('x')
y = x**4 # integrand
f = theano.function([x], y)

print f(0)
print f(1)

ans = integrate.quad(f, 0, 1)[0]

print ans
Run Code Online (Sandbox Code Playgroud)

但是,尝试在Op中进行集成似乎要困难得多.我目前的最大努力是:

import numpy as np
import theano
import theano.tensor as tt
from scipy import integrate

class IntOp(theano.Op):
    __props__ = ()

    def make_node(self, x):
        x = tt.as_tensor_variable(x)
        return theano.Apply(self, [x], [x.type()])

    def perform(self, node, inputs, output_storage):
        x = inputs[0]
        z …
Run Code Online (Sandbox Code Playgroud)

python theano pymc3

5
推荐指数
1
解决办法
870
查看次数

与pymc3和信念的线性回归

我试图掌握Bayesain统计数据 pymc3

我运行此代码进行简单的线性回归

#Generating data y=a+bx
import pymc3
import numpy as np
N=1000
alpha,beta, sigma = 2.0, 0.5, 1.0
np.random.seed(47)
X = np.linspace(0, 1, N)
Y = alpha + beta*X + np.random.randn(N)*sigma

#Fitting
linear_model = pymc3.Model()
with linear_model:
    alpha = pymc3.Normal('alpha', mu=0, sd=10)
    beta = pymc3.Normal('beta', mu=0, sd=10)
    sigma = pymc3.HalfNormal('sigma', sd=1)
    mu = alpha + beta*X
    Y_obs = pymc3.Normal('Y_obs', mu=mu, sd=sigma, observed=Y)

    start = pymc3.find_MAP(fmin=optimize.fmin_powell)
    step = pymc3.NUTS(scaling=start)
    trace = pymc3.sample(500, step, start=start)
Run Code Online (Sandbox Code Playgroud)

我不明白跟踪代表什么

如果我理解的贝叶斯理论不够好,有应该是一个belief即得功能alpha, …

python bayesian pymc3

4
推荐指数
1
解决办法
502
查看次数

将不确定性纳入 pymc3 模型

我有一组数据,其中有每个点的平均值、标准差和观察次数(即,我了解有关测量准确性的知识)。在传统的 pymc3 模型中,我只关注方法,我可能会做以下事情:

x = data['mean']

with pm.Model() as m:
    a = pm.Normal('a', mu=0, sd=1)
    b = pm.Normal('b', mu=1, sd=1)
    y = a + b*x

    eps= pm.HalfNormal('eps', sd=1)
    likelihood = pm.Normal('likelihood', mu=y, sd=eps, observed=x)
Run Code Online (Sandbox Code Playgroud)

将有关观测方差的信息纳入模型的最佳方法是什么?显然,结果应该对低方差观测值赋予比高方差(不太确定)观测值更大的权重。

统计学家建议的一种方法是执行以下操作:

x = data['mean']   # mean of observation
x_sd = data['sd']  # sd of observation
x_n = data['n']    # of measures for observation
x_sem = x_sd/np.sqrt(x_n)

with pm.Model() as m:
    a = pm.Normal('a', mu=0, sd=1)
    b = pm.Normal('b', mu=1, sd=1)
    y = a + b*x …
Run Code Online (Sandbox Code Playgroud)

statistics pymc3

4
推荐指数
1
解决办法
1168
查看次数

PyMC3 traceplot不显示

我试图通过Python工作从Osvaldo Martin的贝叶斯分析中获取PyMC3示例.在Windows 10上,使用matplotlib的以下代码工作正常(即显示图表):

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats


def posterior_grid(grid_points=100, heads=6, tosses=9):
    """
    A grid implementation for the coin-flip problem
    """
    grid = np.linspace(0, 1, grid_points)
    prior = 0.5 - abs(grid - 0.5)
    likelihood = stats.binom.pmf(heads, tosses, grid)
    unstd_posterior = likelihood * prior
    posterior = unstd_posterior / unstd_posterior.sum()
    return grid, posterior


if __name__ == "__main__":
    points = 100
    h, n = 1, 4
    grid, posterior = posterior_grid(points, h, n) …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pymc3

4
推荐指数
1
解决办法
1158
查看次数

pymc 对多个变量进行观察

我正在使用黑客贝叶斯方法的线性回归示例,但无法将其扩展到我的用途。

我对一个随机变量进行了观察,对该随机变量进行了假设分布,最后对我观察到的该随机变量进行了另一个假设分布。a我如何尝试使用和上的中间分布对其进行建模b,但它抱怨Wrong number of dimensions: expected 0, got 1 with shape (788,).

为了描述实际模型,我预测一定数量 (n) 的培养电子邮件的转化率。我的先前观点是,转化率(由 和 上的 Beta 函数描述alpha)将通过某些因子 (0,inf]和beta进行更新alpha和缩放,这些因子从 n=0 的 1 开始,并在某个阈值处增加到最大值。betaab

# Generate predictive data, X and target data, Y
data = [
{'n': 0 , 'trials': 120, 'successes': 1},
{'n': 5 , 'trials': 111, 'successes': 2},
{'n': 10, 'trials': 78 , 'successes': 1},
{'n': 15, 'trials': 144, 'successes': 3},
{'n': …
Run Code Online (Sandbox Code Playgroud)

python bayesian mcmc pymc pymc3

4
推荐指数
1
解决办法
2624
查看次数

由于 geweke 无法导入 pymc3 模块

我尝试将其安装在单独的环境中并arviz单独安装。是import pymc3 as pm行不通的。

AttributeError: module 'arviz' has no attribute 'geweke'
Run Code Online (Sandbox Code Playgroud)

python pymc3

4
推荐指数
1
解决办法
3821
查看次数