在pymc中学习单个参数
Learning a single parameter in pymc
我是pymc的初学者,对贝叶斯学习也比较陌生。因此,由于缺乏理解,这个问题可能看起来很尴尬。
我学习了教程,然后尝试了自己的示例。我使用 x = np.random.exponential(0.25, 500)
生成了一些指数分布的数据 x
,然后我想学习指定分布的 lambda
参数(在本例中为 1/0.25=4
)。
from pymc3 import Model, Exponential, find_MAP
# x is an array of pre-generated exponentially distributed data points
basic_model = Model()
with basic_model:
Y_obs = Exponential("Y_obs", lam=4, observed=x)
map_estimate = find_MAP(model=basic_model)
但是,我得到:
ValueError: zero-size array to reduction operation maximum which has no identity
我后来设法获得了似乎正确使用此代码的结果:
from pymc3 import Model, Exponential, HalfNormal, find_MAP, sample, traceplot
basic_model = Model()
with basic_model:
lam = HalfNormal("lam", sd=1)
Y_obs = Exponential("Y_obs", lam=lam, observed=x)
start = find_MAP(model=basic_model)
trace = sample(2000, start=start)
traceplot(trace)
是吗?我不明白的是为什么我需要另一个分布作为 lambda 参数(HalfNormal 是否可行?)来模拟指数分布,即为什么仅指定 one 分布是不够的,即我感兴趣的指数分布。
我不确定我的理解不足是在pymc还是在一般统计问题上。
感谢您的澄清!
在贝叶斯统计中,如果您不知道参数的值,则必须为其指定先验值。
写的时候
Y_obs = Exponential("Y_obs", lam=4, observed=x)
你是说你知道参数的值是零不确定性,正好是 4。
相反,在第二个示例中,您做对了。您正在指定先验分布、半正态分布,然后是可能性(指数)。如果你检查贝叶斯定理,你会注意到你有两个术语先验和可能性。您总是需要至少 1 个先验和 1 个可能性,并且通常对于更复杂的模型,您将有多个先验(每个参数对应您要学习的参数)
我是pymc的初学者,对贝叶斯学习也比较陌生。因此,由于缺乏理解,这个问题可能看起来很尴尬。
我学习了教程,然后尝试了自己的示例。我使用 x = np.random.exponential(0.25, 500)
生成了一些指数分布的数据 x
,然后我想学习指定分布的 lambda
参数(在本例中为 1/0.25=4
)。
from pymc3 import Model, Exponential, find_MAP
# x is an array of pre-generated exponentially distributed data points
basic_model = Model()
with basic_model:
Y_obs = Exponential("Y_obs", lam=4, observed=x)
map_estimate = find_MAP(model=basic_model)
但是,我得到:
ValueError: zero-size array to reduction operation maximum which has no identity
我后来设法获得了似乎正确使用此代码的结果:
from pymc3 import Model, Exponential, HalfNormal, find_MAP, sample, traceplot
basic_model = Model()
with basic_model:
lam = HalfNormal("lam", sd=1)
Y_obs = Exponential("Y_obs", lam=lam, observed=x)
start = find_MAP(model=basic_model)
trace = sample(2000, start=start)
traceplot(trace)
是吗?我不明白的是为什么我需要另一个分布作为 lambda 参数(HalfNormal 是否可行?)来模拟指数分布,即为什么仅指定 one 分布是不够的,即我感兴趣的指数分布。
我不确定我的理解不足是在pymc还是在一般统计问题上。
感谢您的澄清!
在贝叶斯统计中,如果您不知道参数的值,则必须为其指定先验值。
写的时候
Y_obs = Exponential("Y_obs", lam=4, observed=x)
你是说你知道参数的值是零不确定性,正好是 4。
相反,在第二个示例中,您做对了。您正在指定先验分布、半正态分布,然后是可能性(指数)。如果你检查贝叶斯定理,你会注意到你有两个术语先验和可能性。您总是需要至少 1 个先验和 1 个可能性,并且通常对于更复杂的模型,您将有多个先验(每个参数对应您要学习的参数)