我想用zfit来拟合2昏暗的直线(a*x+b),如下图所示。

这是非常容易的工作,由一个概率包,但它已被反对的科学工具包-hep。https://nbviewer.jupyter.org/github/scikit-hep/probfit/blob/master/tutorial/tutorial.ipynb
我怎样才能用任何函数来拟合这样两个模糊的情节呢?我已经检查了zfit示例,但是它似乎被假定为某种分布(直方图),因此zfit需要像1d数组这样的数据集,而且我无法达到如何将2d数据传递给zfit。
发布于 2020-11-24 18:17:49
zfit目前没有直接的方法来实现这个开箱即用(只有一行),因为没有添加相应的损失。
但是,SimpleLoss (zfit.loss.SimpleLoss) 允许您构造 --您可以想到的任何损失--(请看一下这个示例以及docstring中的示例)。在您的例子中,这将大致如下所示:
x = your_data
y = your_targets # y-value
obs = zfit.Space('x', (lower, upper))
param1 = zfit.Parameter(...)
param2 = zfit.Parameter(...)
...
model = Func(...) # a function is the way to go here
data = zfit.Data.from_numpy(array=x, obs=obs)
def mse():
prediction = model.func(data)
value = tf.reduce_mean((prediction - y) ** 2) # or whatever you want to have
return value
loss = zfit.loss.SimpleLoss(mse, [param1, param2])
# etc.另一方面,增加这样的损失是个好主意。如果你有兴趣做贡献,我建议你和作者联系,他们会很乐意帮助你,引导你去做。
更新
损失函数本身大概由三到四件东西组成: x,y,一个模型,可能是y的一个不确定性。chi2损失看起来如下:
def chi2():
y_pred = model.func(x)
return tf.reduce_sum((y_pred - y) / y_error) ** 2)
loss = zfit.loss.SimpleLoss(chi2, model.get_params())就这些,4行代码。X是zfit.Data对象,模型在本例中是Func。
那有用吗?就这样。
https://stackoverflow.com/questions/64964317
复制相似问题