首页 > 解决方案 > 如何同时将 2 个数据集拟合到 2 个参考数据集并提取共享参数

问题描述

我有 2 个(模拟)数据集和 2 个(实验)参考数据集。

由于模拟是以数值方式进行的,因此没有方法/功能是已知的,只有模拟数据可用。

这两个数据集共享我想通过将模拟拟合到参考数据来提取的参数。

我没有找到任何 python 功能来仅使用数据集而不是拟合函数/模型来执行这种拟合/最小化/优化。

具体来说:我有以下两个方程:

e1 = a * s1 + b * t1 + c * u1 和

e2 = a * s2 + b * t2 + c * u2 和

我想弄清楚参数a,b,c。

e1, e2 是实验性的 NxN np.arrays(可以在热图中可视化或可以视为 f(x,y) )和

s1, s2, t1, t2, u1, u2 是包含模拟数据的 MxM np.arrays。

我希望方程(热图)的左侧和右侧尽可能相似,并考虑两个方程相似以了解 a、b、c。

使 N = M 需要付出努力,但可以做到。我知道,我必须使用两个模型,但我只知道如何将匹配的 1xN 实验和模拟数组传递给模型。

标签: pythonscipydata-fittingscipy-optimize

解决方案


我写了一个围绕 scipy 的包装器,symfit它使这种问题很简单,所以我想你可能有兴趣使用它。使用symfit你的问题,你可以写

from symfit import parameters, variables, Fit, Model

e1, e2, s1, s2, t1, t2, u1, u2 = variables('e1, e2, s1, s2, t1, t2, u1, u2')
a, b, c = parameters('a, b, c')

model = Model({
    e1: a * s1 + b * t1 + c * u1,
    e2: a * s2 + b * t2 + c * u2,
})

fit = Fit(model, u1=u1data, s1=s1data, ...)
fit_result = fit.execute()
print(fit_result)

有关更多信息,请参阅文档。祝你好运!


推荐阅读