【发布时间】:2015-01-17 16:57:33
【问题描述】:
我目前使用 scipy.optimize.minimize 和 scipy.optimize.leastsq 对我的数据集执行非线性回归。我想使用 PyMC(3) 来研究拟合过程中涉及的所有参数的后验。我在 SO 上遇到了这个previous answer。
这是一个很好的例子,我看到的大多数其他例子都是线性回归的。但是,该示例并不完全适合我的目的。我的模型具有可变数量的参数,我将拟合其中的一个子集。该子集通常在 1 到 20 个参数的范围内,但有时更多。使用 scipy 最小化器,这些不同的参数以 1D np.ndarray 的形式传递给成本函数,p,例如
def chi2(p, *args):
xdata = args[0]
return p[0] + xdata * p[1] + ........
在上面给出的链接中,@pymc.deterministic 装饰的高斯函数具有关键字参数。这对我来说是不切实际的,因为同一个代码块需要处理不同(和相当大)数量的参数。有没有办法提供参数向量?我还必须为每个参数提供一个先验列表。但是,我有每个参数 [(min, max)...] 的下限和上限列表,所以这不是问题。
【问题讨论】:
-
参数的数量不应该随着迭代而改变,不是吗?你能详细说明一下吗?
-
克里斯,我正在尝试将 pymc 固定到 lmfit-py 项目中。这个想法是使用 pymc 对曲线拟合场景中的参数执行贝叶斯分析。在 lmfit 中,创建了一个返回曲线拟合残差的目标函数。从那以后,我已经弄清楚了如何在这种情况下使用 pymc,这很棒。本质上,我创建了一个
@pm.observed likelihood函数,它根据用户目标函数返回一个pm.normal_like分布。在 lmfit 中,您的曲线拟合可能有 M 个参数,您允许其中 N 个参数变化,0