2 dim 数据集的 zfit 直线拟合
zfit straight line fitting for 2 dim dataset
我想使用 zfit 按直线 (a*x+b) 拟合 2-dim 图,如下图所示。
probfit 包很容易做到这一点,但它已被 scikit-hep 弃用。 https://nbviewer.jupyter.org/github/scikit-hep/probfit/blob/master/tutorial/tutorial.ipynb
如何通过任何函数拟合这样的 2dim 图?
我已经检查了 zfit 示例,但它似乎假设了一些分布(直方图)因此 zfit 需要像 1d 数组这样的数据集,我无法达到如何将 2d 数据传递给 zfit。
目前在 zfit 中没有直接的方法来实现这个开箱即用的方法(一行),因为根本没有添加相应的损失。
然而,SimpleLoss
(zfit.loss.SimpleLoss) allows you to construct 任何你能想到的损失(请查看文档字符串中的示例)。在你的情况下,这看起来像这样:
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
.
这有用吗?
就这些了。
我想使用 zfit 按直线 (a*x+b) 拟合 2-dim 图,如下图所示。
probfit 包很容易做到这一点,但它已被 scikit-hep 弃用。 https://nbviewer.jupyter.org/github/scikit-hep/probfit/blob/master/tutorial/tutorial.ipynb
如何通过任何函数拟合这样的 2dim 图? 我已经检查了 zfit 示例,但它似乎假设了一些分布(直方图)因此 zfit 需要像 1d 数组这样的数据集,我无法达到如何将 2d 数据传递给 zfit。
目前在 zfit 中没有直接的方法来实现这个开箱即用的方法(一行),因为根本没有添加相应的损失。
然而,SimpleLoss
(zfit.loss.SimpleLoss) allows you to construct 任何你能想到的损失(请查看文档字符串中的示例)。在你的情况下,这看起来像这样:
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
.
这有用吗? 就这些了。