【问题标题】:zfit straight line fitting for 2 dim dataset2 暗数据集的 zfit 直线拟合
【发布时间】:2020-11-23 07:44:56
【问题描述】:

我想使用 zfit 通过直线 (a*x+b) 拟合二维图,如下图。

probfit 包很容易做到这一点,但它已被 scikit-hep 弃用。 https://nbviewer.jupyter.org/github/scikit-hep/probfit/blob/master/tutorial/tutorial.ipynb

如何通过任何函数拟合这样的 2dim 图? 我检查了 zfit 示例,但似乎假设有一些分布(直方图),因此 zfit 需要像 1d 数组这样的数据集,我无法了解如何将 2d 数据传递给 zfit。

【问题讨论】:

    标签: zfit


    【解决方案1】:

    目前在 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

    这行得通吗? 就是这样。

    【讨论】:

    • 非常感谢您的回答。但是,解决方案似乎有点复杂。你知道python上更适合的包吗?我只想要一个像cern的ROOT这样的包。 (probfit 对我来说非常好,但它已被 scikit-hep 标记为已弃用)
    • 我不确定我是否遵循:为了澄清,您需要进行扩展似然拟合还是拟合函数 x-y?如果是后者,您打算使用的成本函数到底是什么?例如。均方误差?
    • 我认为用户应该能够选择他们想要的成本函数。那就是装修包的作用。我假设可能性拟合。我只是尝试通过带有卡方成本函数的线性函数开始简单的 x-y 拟合,但我想知道如何将这些特征扩展到一般(更复杂)的拟合。我的第一个问题明确表示,zfit 是否支持这些拟合。
    • 我认为我们完全同意。在 zfit 中,您不仅可以使用 some,还可以使用 any 损失函数。我试图展示一种“粗略”的方式来进行任意操作,但更具体地询问了您需要哪种方式,以便直接展示如何操作。虽然一些损失函数可以与一行代码一起使用,但其他损失函数需要 3-4 个(如上)。但重要的是:是的,你可以做你想做的事。顺便说一句,上面的例子不仅仅是损失函数的实现,而是 whole fit
    • 编辑了答案以包含 chi2。让我知道它是否不起作用或您有任何其他问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2010-10-09
    • 2018-12-18
    • 2011-10-14
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多