首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在zfit中使用未入库的最大似然拟合中具有负权重的数据

在zfit中使用未入库的最大似然拟合中具有负权重的数据
EN

Stack Overflow用户
提问于 2020-08-19 04:05:12
回答 2查看 141关注 0票数 2

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

代码语言:javascript
复制
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)时,不会遇到该错误。我相信这是因为它删除了加权数据为负的相空间区域。

EN

回答 2

Stack Overflow用户

发布于 2020-08-28 20:50:42

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

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

代码语言:javascript
复制
custom_pdf.pdf(data)

一旦记录日志,这种负的概率就会变成NaNs。

也许在PDF的定义中有一个拼写错误,因为变量h_pst似乎没有使用。

票数 1
EN

Stack Overflow用户

发布于 2020-09-25 19:04:34

为了结束这个帖子,PDF在某些地方是负的,我认为这是由于接受PDF。h_pst没有被使用也是事实,但是移除它并没有改变任何事情。最后,我只是在没有负PDF值的区域对数据进行了拟合,这似乎不会影响结果(它只是忽略了costheta_X中密度接近于零的一小块区域)。

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

https://stackoverflow.com/questions/63475861

复制
相关文章

相似问题

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