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()