首页 文章

与pymc3和信念的线性回归

提问于
浏览
4

我试图用 pymc3 掌握Bayesain统计数据

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

#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)

我不明白跟踪代表什么

如果我足够了解贝叶斯理论,那么应该有一个 alphabetasigma 并输出它们组合的概率 .

如何从 trace 变量中获取此 belief 结构?

1 回答

  • 8

    trace 是马尔可夫链蒙特卡罗(MCMC)过程的输出 . 在给定数据的情况下,它会收敛到参数的分布(例如,信念) .

    您可以使用以下方法查看跟踪:

    pymc3.traceplot(trace, vars=['alpha', 'beta', 'sigma'])
    

    Trace Plot

    如果您希望在跟踪的每个点上看到回归的各个实现,您可以执行以下操作:

    import matplotlib.pyplot as plt
    
    a = trace['alpha']
    b = trace['beta']
    x = np.linspace(0,1,N)
    
    fig = plt.figure(figsize=(12,4))
    
    ax = fig.add_subplot(1,2,1)
    plt.scatter(X,Y, color='g', alpha=0.3)
    for i in xrange(500):
      y = a[i] + b[i] * x
      plt.plot(x, y, 'b', alpha=0.02)
    
    ax = fig.add_subplot(1,2,2)
    for i in xrange(500):
      y = a[i] + b[i] * x
      plt.plot(x, y, 'b', alpha=0.02)
    plt.show()
    

    Individual Realizations

    Note :您的代码似乎缺少该行: from scipy import optimize

相关问题