pymc3 和信念的线性回归
Linear regression with pymc3 and belief
我正在尝试使用 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)
不明白trace是什么意思
如果我对贝叶斯理论足够了解,应该有一个belief
函数可以得到alpha
、beta
和sigma
并输出它们的概率组合.
如何从 trace
变量中得到这个 belief
结构?
trace
是马尔可夫链 Monte Carlo (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
我正在尝试使用 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)
不明白trace是什么意思
如果我对贝叶斯理论足够了解,应该有一个belief
函数可以得到alpha
、beta
和sigma
并输出它们的概率组合.
如何从 trace
变量中得到这个 belief
结构?
trace
是马尔可夫链 Monte Carlo (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