为什么pymc.MAP并不总是返回相同的值

时间:2017-05-29 15:07:41

标签: pymc

我正在运行pymc2以适应我的数据的直线。代码如下所示(根据我在网上找到的例子进行了修改)。当我多次调用MAP功能时,我会得到不同的答案,即使我从完全相同的模型开始。我认为优化方法fmin_powell从每个参数提供的value开始。据我所知,fmin_powell没有随机分量,所以它总是应该以相同的最优结束,但事实并非如此。为什么我会不断得到不同的结果?

import numpy as np
import pymc

# observed data
n = 21
a = 6
b = 2
sigma = 2
x = np.linspace(0, 1, n)
np.random.seed(1)
y_obs = a * x + b + np.random.normal(0, sigma, n)

def model():
    # define priors
    a = pymc.Normal('a', mu=0, tau=1  /10 ** 2, value=5)
    b = pymc.Normal('b', mu=0, tau=1 / 10 ** 2, value=1)
    tau = pymc.Gamma('tau', alpha=0.1, beta=0.1, value=1)

    # define likelihood
    @pymc.deterministic
    def mu(a=a, b=b, x=x):
        return a * x + b

    y = pymc.Normal('y', mu=mu, tau=tau, value=y_obs, observed=True)
    return locals()

ml = model()  # dictionary of all locals
mcmc = pymc.Model(ml)  # MCMC object
mapmcmc = pymc.MAP(mcmc)
mapmcmc.fit(method='fmin_powell')
print(mcmc.a.value, mcmc.b.value, mcmc.tau.value)

ml = model()  # dictionary of all locals
mcmc = pymc.Model(ml)  # MCMC object
mapmcmc = pymc.MAP(mcmc)
mapmcmc.fit(method='fmin_powell')
print(mcmc.a.value, mcmc.b.value, mcmc.tau.value)

ml = model()  # dictionary of all locals
mcmc = pymc.Model(ml)  # MCMC object
mapmcmc = pymc.MAP(mcmc)
mapmcmc.fit(method='fmin_powell')
print(mcmc.a.value, mcmc.b.value, mcmc.tau.value)

0 个答案:

没有答案