首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2 dim数据集的zfit直线拟合

2 dim数据集的zfit直线拟合
EN

Stack Overflow用户
提问于 2020-11-23 07:44:56
回答 1查看 112关注 0票数 0

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

这是非常容易的工作,由一个概率包,但它已被反对的科学工具包-hep。https://nbviewer.jupyter.org/github/scikit-hep/probfit/blob/master/tutorial/tutorial.ipynb

我怎样才能用任何函数来拟合这样两个模糊的情节呢?我已经检查了zfit示例,但是它似乎被假定为某种分布(直方图),因此zfit需要像1d数组这样的数据集,而且我无法达到如何将2d数据传递给zfit。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-24 18:17:49

zfit目前没有直接的方法来实现这个开箱即用(只有一行),因为没有添加相应的损失。

但是,SimpleLoss (zfit.loss.SimpleLoss) 允许您构造 --您可以想到的任何损失--(请看一下这个示例以及docstring中的示例)。在您的例子中,这将大致如下所示:

代码语言:javascript
复制
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损失看起来如下:

代码语言:javascript
复制
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

那有用吗?就这样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64964317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档