【问题标题】:Use of data with negative weights in unbinned maximum likelihood fit in zfit在 zfit 中使用未合并的最大似然拟合中具有负权重的数据
【发布时间】:2020-12-08 01:34:59
【问题描述】:

我正在尝试在 zfit 中执行未合并的 3D 角度拟合,其中输入数据是具有从单独的不变质量峰值拟合分配的每个事件 sWeights 的样本。我想我在角相空间的某些区域遇到了负加权事件的问题,因为 zfit 给出了错误:

Traceback (most recent call last):
  File "unbinned_angular_fit.py", line 282, in <module>
    main()
  File "unbinned_angular_fit.py", line 217, in main
    result = minimizer.minimize(nll)
  File "/home/dhill/miniconda/envs/ana_env/lib/python3.7/site-packages/zfit/minimizers/baseminimizer.py", line 265, in minimize
    return self._hook_minimize(loss=loss, params=params)
  File "/home/dhill/miniconda/envs/ana_env/lib/python3.7/site-packages/zfit/minimizers/baseminimizer.py", line 274, in _hook_minimize
    return self._call_minimize(loss=loss, params=params)
  File "/home/dhill/miniconda/envs/ana_env/lib/python3.7/site-packages/zfit/minimizers/baseminimizer.py", line 278, in _call_minimize
    return self._minimize(loss=loss, params=params)
  File "/home/dhill/miniconda/envs/ana_env/lib/python3.7/site-packages/zfit/minimizers/minimizer_minuit.py", line 179, in _minimize
    result = minimizer.migrad(**minimize_options)
  File "src/iminuit/_libiminuit.pyx", line 859, in iminuit._libiminuit.Minuit.migrad
RuntimeError: exception was raised in user function
User function arguments:
    Hm_amp = +nan
    Hm_phi = +0.000000
    Hp_phi = +0.000000
Original python exception in user function:
RuntimeError: Loss starts already with NaN, cannot minimize.
  File "/home/dhill/miniconda/envs/ana_env/lib/python3.7/site-packages/zfit/minimizers/minimizer_minuit.py", line 121, in func
    values=info_values)
  File "/home/dhill/miniconda/envs/ana_env/lib/python3.7/site-packages/zfit/minimizers/baseminimizer.py", line 47, in minimize_nan
    return self._minimize_nan(loss=loss, params=params, minimizer=minimizer, values=values)
  File "/home/dhill/miniconda/envs/ana_env/lib/python3.7/site-packages/zfit/minimizers/baseminimizer.py", line 107, in _minimize_nan
    raise RuntimeError("Loss starts already with NaN, cannot minimize.")

我可以通过稍微限制其中一个拟合可观察范围来避免此错误,以避免出现少量数据事件的区域,其中某些数据的权重为负(信号被 sWeights 略微过度减去)。但我想知道在 zfit 中是否有另一种解决方法?

也许 zfit 中的 UnbinnedNLL 方法明确需要正事件,但负加权数据点可以设置为零或一个小的正值?我应该说,与权重的总和相比,负权重的水平似乎很小,并且发生在只有少量数据事件的角度分布之一的边缘。该区域的数据率低是由于实验接受效应。

在测试文件上运行以重现错误的代码如下: https://github.com/donalrinho/zfit_3D_unbinned_angular_fit_test

costheta_X_VV_reco 变量的范围被限制为 (-0.9, 1.0) 而不是完整范围 (-1.0, 1.0) 时,不会遇到此错误。我相信这是因为它去除了加权数据为负的相空间区域。

【问题讨论】:

  • 如果也能看到引发异常的python代码就好了,否则帮助你就很难了。
  • 谢谢@DownloadPizza - 我在上面添加了代码链接

标签: weighted log-likelihood zfit


【解决方案1】:

只是为了关闭这个线程,我认为 PDF 在某些地方是负面的,我认为这是由于接受 PDF。 h_pst ins 也没有使用,但删除它并没有改变任何东西。最后,我刚刚在没有任何负 PDF 值的区域中拟合了数据,这似乎不会影响结果(它只是忽略了 costheta_X 中密度接近零的小区域)。

【讨论】:

    【解决方案2】:

    NLL in zfit 的定义中可以看出,权重只是简单地乘以对数概率,因此负权重应该不是问题。

    但是,PDF 似乎对某些值返回负概率,您可以通过简单地获取返回的数组来查看

    custom_pdf.pdf(data)
    

    一旦获取日志,这个负概率将变成 NaN。

    可能在 PDF 的定义中存在拼写错误,因为变量 h_pst 似乎未使用。

    【讨论】:

      猜你喜欢
      • 2022-08-11
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 2017-08-08
      • 2014-04-05
      • 2020-02-25
      相关资源
      最近更新 更多