假设我尝试使用以下数据估计一个简单的 y= m * x
问题的斜率:
x_data = np.array([0,1,2,3])
y_data = np.array([0,1,2,3])
显然斜率为1。但是,当我在 PyMC 中运行它时,我得到 10
slope = pm.Uniform('slope', lower=0, upper=20)
@pm.deterministic
def y_gen(value=y_data, x=x_data, slope=slope, observed=True):
return slope * x
model = pm.Model([slope])
mcmc = pm.MCMC(model)
mcmc.sample(100000, 5000)
# This returns 10
final_guess = mcmc.trace('slope')[:].mean()
但它应该是1!
注意:以上是PyMC2。
最佳答案
你需要定义一个可能性,试试这个:
import pymc as pm
import numpy as np
x_data = np.linspace(0,1,100)
y_data = np.linspace(0,1,100)
slope = pm.Normal('slope', mu=0, tau=10**-2)
tau = pm.Uniform('tau', lower=0, upper=20)
@pm.deterministic
def y_gen(x=x_data, slope=slope):
return slope * x
like = pm.Normal('likelihood', mu=y_gen, tau=tau, observed=True, value=y_data)
model = pm.Model([slope, y_gen, like, tau])
mcmc = pm.MCMC(model)
mcmc.sample(100000, 5000)
# This returns 10
final_guess = mcmc.trace('slope')[:].mean()
它返回 10,因为您只是先从制服中抽样,而 10 是它的预期值。
关于python - PyMC 最简单的线性模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22239121/