跳转到主要内容

C++中MINUIT2的Jupyter友好的Python前端

项目描述

https://scikit-hep.org/assets/images/Scikit--HEP-Project-blue.svg https://img.shields.io/pypi/v/iminuit.svg https://img.shields.io/conda/vn/conda-forge/iminuit.svg https://coveralls.io/repos/github/scikit-hep/iminuit/badge.svg?branch=develop https://github.com/scikit-hep/iminuit/actions/workflows/docs.yml/badge.svg?branch=main https://zenodo.org/badge/DOI/10.5281/zenodo.3949207.svg ascl:2108.024 https://img.shields.io/gitter/room/Scikit-HEP/iminuit https://mybinder.org/badge_logo.svg

iminuit 是一个 Jupyter 兼容的 Python 接口,用于 CERN 的 ROOT 团队 维护的 C++ 库 Minuit2

Minuit 是为了优化统计成本函数而设计的,用于最大似然和最小二乘拟合。它提供了从似然轮廓分析得到的最佳拟合参数和误差估计。

iminuit 包提供了额外的功能

  • 用于 N 维数据的统计拟合的内置成本函数

    • 非归一化和归一化的最大似然 + 扩展版本

    • 模板拟合,具有误差传播

    • 最小二乘法(可选,对异常值稳健)

    • 参数的高斯惩罚项

    • 可以通过加法组合成本函数: total_cost = cost_1 + cost_2

    • Jupyter 笔记本中的拟合可视化

  • 支持 SciPy 最小化器作为 Minuit 的 MIGRAD 算法的替代方案(可选)

  • 支持 Numba 加速函数(可选)

最小依赖

iminuit 保证保持为一个精简的包,只依赖于 numpy,但如果安装以下可选包,则可以启用额外功能。

  • numba:如果安装了 numba,则成本函数将被部分 JIT 编译。

  • matplotlib:内置成本函数的拟合模型可视化

  • ipywidgets:交互式拟合,请参见以下示例(还需要 matplotlib

  • scipy:计算任意置信水平下的 Minos 区间

  • unicodeitplus:以简单的 LaTeX 格式渲染模型参数的名称

文档

查看我们庞大的全面教程列表,从初学者到高级用户。有关帮助和如何提问,请使用 GitHub 上的 讨论gitter

Glen Cowan 的讲座

在 2022 年 KMISchool 的讲座练习中,Glen Cowan 展示了如何使用 iminuit 在 Python 中解决统计问题。您可以在 Github 页面上找到讲座和练习,涵盖了频率主义和贝叶斯方法。

Glen Cowan 因其在粒子物理学中的统计论文和国际讲座而闻名,作为粒子数据组成员,以及广受欢迎的书籍 Statistical Data Analysis 的作者。

总结

iminuit 可以使用用户提供的成本函数,形式为负对数似然函数或最小二乘函数。标准函数包含在 iminuit.cost 中,因此您无需自己编写。以下示例展示了如何进行非归一化最大似然拟合。

import numpy as np
from iminuit import Minuit
from iminuit.cost import UnbinnedNLL
from scipy.stats import norm

x = norm.rvs(size=1000, random_state=1)

def pdf(x, mu, sigma):
    return norm.pdf(x, mu, sigma)

# Negative unbinned log-likelihood, you can write your own
cost = UnbinnedNLL(x, pdf)

m = Minuit(cost, mu=0, sigma=1)
m.limits["sigma"] = (0, np.inf)
m.migrad()  # find minimum
m.hesse()   # compute uncertainties
Output of the demo in a Jupyter notebook

交互式拟合

iminuit 可选支持 Jupyter 笔记本中的交互式拟合模式。

Animated demo of an interactive fit in a Jupyter notebook

与 numba 结合时性能高

iminuit 与使用 numba (JIT 编译的 pdf 由 numba_stats 提供) JIT 编译的成本函数一起使用时,速度与最快后端的 RooFit 相当。使用自动并行化的 numba 比在 RooFit 中的并行计算快得多。

doc/_static/roofit_vs_iminuit+numba.svg

有关此基准的更多信息请参阅文档中的 基准部分

引用

如果您在科学工作中使用了iminuit,请引用我们。通用的BibTeX条目如下

@article{iminuit,
  author={Hans Dembinski and Piti Ongmongkolkul et al.},
  title={scikit-hep/iminuit},
  DOI={10.5281/zenodo.3949207},
  publisher={Zenodo},
  year={2020},
  month={Dec},
  url={https://doi.org/10.5281/zenodo.3949207}
}

此条目中的DOI和URL始终指向iminuit的最新版本。您也可以引用您实际使用的版本,请参考Zenodo链接,它提供了所有iminuit版本的常见参考文献格式条目。

MINUIT算法的推荐科学参考是

@article{James:1975dr,
    author = "James, F. and Roos, M.",
    title = "{Minuit: A System for Function Minimization and Analysis of the Parameter Errors and Correlations}",
    reportNumber = "CERN-DD-75-20",
    doi = "10.1016/0010-4655(75)90039-9",
    journal = "Comput. Phys. Commun.",
    volume = "10",
    pages = "343--367",
    year = "1975"
}

合作伙伴项目

  • numba_stats提供了比scipy更快的概率密度函数实现,以及一些在粒子物理学中使用但不在scipy中的特定实现。

  • 来自Scikit-HEP的boost-histogram提供了快速的一般化直方图,您可以使用内置的成本函数使用它。

  • jacobi提供了一种稳健、快速且精确的计算任何变换函数的Jacobi矩阵和构建通用误差传播函数的方法。

版本

2.x系列相对于1.x系列引入了破坏性接口更改。没有计划引入进一步的重大更改。

从1.x到2.x的所有接口更改都记录在变更日志中,其中包含升级建议。为了保持旧脚本运行,将您的iminuit主版本锁定在<2:命令pip install 'iminuit<2'安装1.x系列。

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

iminuit-2.30.0.tar.gz (1.8 MB 查看哈希值)

上传时间: 源代码

构建分发

iminuit-2.30.0-cp312-cp312-win_amd64.whl (369.0 kB 查看哈希值)

上传时间: CPython 3.12 Windows x86-64

iminuit-2.30.0-cp312-cp312-win32.whl (322.6 kB 查看哈希值)

上传时间: CPython 3.12 Windows x86

iminuit-2.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (436.0 kB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ x86-64

iminuit-2.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (402.3 kB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ ARM64

iminuit-2.30.0-cp312-cp312-macosx_11_0_arm64.whl (369.5 kB 查看哈希值)

上传时间: CPython 3.12 macOS 11.0+ ARM64

iminuit-2.30.0-cp312-cp312-macosx_10_9_x86_64.whl (411.6 kB 查看哈希值)

上传时间: CPython 3.12 macOS 10.9+ x86-64

iminuit-2.30.0-cp311-cp311-win_amd64.whl (368.8 kB 查看哈希值)

上传时间: CPython 3.11 Windows x86-64

iminuit-2.30.0-cp311-cp311-win32.whl (322.1 kB 查看哈希值)

上传于 CPython 3.11 Windows x86

iminuit-2.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (440.9 kB 查看哈希)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

iminuit-2.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (407.4 kB 查看哈希)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

iminuit-2.30.0-cp311-cp311-macosx_11_0_arm64.whl (368.7 kB 查看哈希)

上传于 CPython 3.11 macOS 11.0+ ARM64

iminuit-2.30.0-cp311-cp311-macosx_10_9_x86_64.whl (409.6 kB 查看哈希)

上传于 CPython 3.11 macOS 10.9+ x86-64

iminuit-2.30.0-cp310-cp310-win_amd64.whl (367.7 kB 查看哈希)

上传于 CPython 3.10 Windows x86-64

iminuit-2.30.0-cp310-cp310-win32.whl (321.3 kB 查看哈希)

上传于 CPython 3.10 Windows x86

iminuit-2.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (439.4 kB 查看哈希)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

iminuit-2.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (405.3 kB 查看哈希)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

iminuit-2.30.0-cp310-cp310-macosx_11_0_arm64.whl (367.5 kB 查看哈希)

上传于 CPython 3.10 macOS 11.0+ ARM64

iminuit-2.30.0-cp310-cp310-macosx_10_9_x86_64.whl (408.5 kB 查看哈希)

上传于 CPython 3.10 macOS 10.9+ x86-64

iminuit-2.30.0-cp39-cp39-win_amd64.whl (367.8 kB 查看哈希)

上传于 CPython 3.9 Windows x86-64

iminuit-2.30.0-cp39-cp39-win32.whl (321.6 kB 查看哈希)

上传于 CPython 3.9 Windows x86

iminuit-2.30.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (405.9 kB 查看哈希)

上传于 CPython 3.9 manylinux: glibc 2.17+ ARM64

iminuit-2.30.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (402.1 kB 查看哈希)

上传于 CPython 3.9 manylinux: glibc 2.12+ x86-64

iminuit-2.30.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (414.0 kB 查看哈希)

上传于 CPython 3.9 manylinux: glibc 2.12+ i686

iminuit-2.30.0-cp39-cp39-macosx_11_0_arm64.whl (367.6 kB 查看哈希)

上传于 CPython 3.9 macOS 11.0+ ARM64

iminuit-2.30.0-cp39-cp39-macosx_10_9_x86_64.whl (408.5 kB 查看哈希)

上传于 CPython 3.9 macOS 10.9+ x86-64

由以下机构支持

AWSAWS云计算和安全赞助商 DatadogDatadog监控 FastlyFastlyCDN GoogleGoogle下载分析 MicrosoftMicrosoftPSF赞助商 PingdomPingdom监控 SentrySentry错误日志 StatusPageStatusPage状态页面