pymc.model.core.设置_数据#

pymc.model.core.set_data(new_data, model=None, *, coords=None)[源代码]#

设置一个或多个数据容器变量的值。注意,形状也是动态的,当值改变时会更新。请参见下面的示例,了解两种利用此行为的常见用例。

参数:
new_data: dict

数据容器的新值。字典的键是模型中的变量名称,值是用于更新的对象。

model: 模型 (如果处于 `with` 上下文中,则为可选)

示例

这个例子展示了如何改变似然函数的形状,使其自动与回归模型中的预测变量 x 相对应。

import pymc as pm

with pm.Model() as model:
    x = pm.MutableData('x', [1., 2., 3.])
    y = pm.MutableData('y', [1., 2., 3.])
    beta = pm.Normal('beta', 0, 1)
    obs = pm.Normal('obs', x * beta, 1, observed=y, shape=x.shape)
    idata = pm.sample()

然后更改 x 的值以对新数据进行预测。

with model:
    pm.set_data({'x': [5., 6., 9., 12., 15.]})
    y_test = pm.sample_posterior_predictive(idata)

print(y_test.posterior_predictive['obs'].mean(('chain', 'draw')))

>>> array([4.6088569 , 5.54128318, 8.32953844, 11.14044852, 13.94178173])

这个例子展示了如何在不重新编译的情况下,对新数据集重用同一个模型。似然形状 obs 会自动跟踪观测数据 y 的形状。

import numpy as np
import pymc as pm

rng = np.random.default_rng()
data = rng.normal(loc=1.0, scale=2.0, size=100)

with pm.Model() as model:
    y = pm.MutableData('y', data)
    theta = pm.Normal('theta', mu=0.0, sigma=10.0)
    obs = pm.Normal('obs', theta, 2.0, observed=y, shape=y.shape)
    idata = pm.sample()

现在用新的数据集更新模型。

with model:
    pm.set_data({'y': rng.normal(loc=1.0, scale=2.0, size=200)})
    idata = pm.sample()