4

でベイジアン統計を把握しようとしています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)

トレースが何を表しているのかわかりません

ベイジアン理論を十分に理解していれば、 を取得し、それらの組み合わせの確率を出力する関数があるbeliefはずです。alphabetasigma

変数からこのbelief構造を取得するにはどうすればよいですか?trace

4

1 に答える 1

8

これtraceは、マルコフ連鎖モンテカルロ (MCMC) プロセスの出力です。データが与えられると、パラメーターの分布 (信念など) に収束します。

次を使用してトレースを表示できます。

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

トレース プロット

トレースの各ポイントに沿って回帰の個々の実現を確認したい場合は、次のようにすることができます。

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

個人の実現

:コードに次の行が欠落しているようです: from scipy import optimize

于 2015-07-18T17:29:58.137 に答える