uncertainty-toolbox:Uncertainty Toolbox: a Python toolbox for predictive uncertainty quantification, calibration, metrics, and visualization

Uncertainty Toolbox: a Python toolbox for predictive uncertainty quantification, calibration, metrics, and visualization

分支6Tags2
文件最后提交记录最后更新时间
Clean imports and dependencies, fix plotting function, update tests (#83) * update version to 0.1.1rc1 * update requirements * remove extra imports from metrics_calibration.py * split up miscalibration_area function into two * update docstring wording * 1) Remove shapely package dependencies 2) Replace miscalibration area computation in plot_calibration function 3) Remove show argument from plot_calibration function 4) Append prop_type argument in plot_calibration function * 1) Remove unnecessary arguments in plot_sharpness function 2) Make tests for filter_subset usages. * bump version to 0.1.1rc2 * blackify code * update recalibration tests for scipy update * bump version to 0.1.1rc3 * remove setup.py, link pyproject.toml to requirements * update README dev install command * bump version to 0.1.1rc4 * add requirements back into pyproject.toml, remove requirements.txt * remove requirements ref in requirements_dev * update install details in README, docs * Updated optimizer bounds and let user provide them. (#84) Co-authored-by: Ian Char <ianchar4@gmail.com> * update default optimizer_bounds for std_recalibrator * format recalibration with black * update test_recalibration to loosen checks * bump version to 0.1.1rc5 * bump version to 0.1.1 * update pip details in README, docs/installation Co-authored-by: Youngseog Chung <youngsec@cs.cmu.edu> Co-authored-by: Ian Char <ianchar4@gmail.com>3 年前
Clean imports and dependencies, fix plotting function, update tests (#83) * update version to 0.1.1rc1 * update requirements * remove extra imports from metrics_calibration.py * split up miscalibration_area function into two * update docstring wording * 1) Remove shapely package dependencies 2) Replace miscalibration area computation in plot_calibration function 3) Remove show argument from plot_calibration function 4) Append prop_type argument in plot_calibration function * 1) Remove unnecessary arguments in plot_sharpness function 2) Make tests for filter_subset usages. * bump version to 0.1.1rc2 * blackify code * update recalibration tests for scipy update * bump version to 0.1.1rc3 * remove setup.py, link pyproject.toml to requirements * update README dev install command * bump version to 0.1.1rc4 * add requirements back into pyproject.toml, remove requirements.txt * remove requirements ref in requirements_dev * update install details in README, docs * Updated optimizer bounds and let user provide them. (#84) Co-authored-by: Ian Char <ianchar4@gmail.com> * update default optimizer_bounds for std_recalibrator * format recalibration with black * update test_recalibration to loosen checks * bump version to 0.1.1rc5 * bump version to 0.1.1 * update pip details in README, docs/installation Co-authored-by: Youngseog Chung <youngsec@cs.cmu.edu> Co-authored-by: Ian Char <ianchar4@gmail.com>3 年前
Clean imports and dependencies, fix plotting function, update tests (#83) * update version to 0.1.1rc1 * update requirements * remove extra imports from metrics_calibration.py * split up miscalibration_area function into two * update docstring wording * 1) Remove shapely package dependencies 2) Replace miscalibration area computation in plot_calibration function 3) Remove show argument from plot_calibration function 4) Append prop_type argument in plot_calibration function * 1) Remove unnecessary arguments in plot_sharpness function 2) Make tests for filter_subset usages. * bump version to 0.1.1rc2 * blackify code * update recalibration tests for scipy update * bump version to 0.1.1rc3 * remove setup.py, link pyproject.toml to requirements * update README dev install command * bump version to 0.1.1rc4 * add requirements back into pyproject.toml, remove requirements.txt * remove requirements ref in requirements_dev * update install details in README, docs * Updated optimizer bounds and let user provide them. (#84) Co-authored-by: Ian Char <ianchar4@gmail.com> * update default optimizer_bounds for std_recalibrator * format recalibration with black * update test_recalibration to loosen checks * bump version to 0.1.1rc5 * bump version to 0.1.1 * update pip details in README, docs/installation Co-authored-by: Youngseog Chung <youngsec@cs.cmu.edu> Co-authored-by: Ian Char <ianchar4@gmail.com>3 年前
Setup fixes (#53) * update setup.py with package_data * update requirements files * update flag in shell script to run all tests4 年前
Clean imports and dependencies, fix plotting function, update tests (#83) * update version to 0.1.1rc1 * update requirements * remove extra imports from metrics_calibration.py * split up miscalibration_area function into two * update docstring wording * 1) Remove shapely package dependencies 2) Replace miscalibration area computation in plot_calibration function 3) Remove show argument from plot_calibration function 4) Append prop_type argument in plot_calibration function * 1) Remove unnecessary arguments in plot_sharpness function 2) Make tests for filter_subset usages. * bump version to 0.1.1rc2 * blackify code * update recalibration tests for scipy update * bump version to 0.1.1rc3 * remove setup.py, link pyproject.toml to requirements * update README dev install command * bump version to 0.1.1rc4 * add requirements back into pyproject.toml, remove requirements.txt * remove requirements ref in requirements_dev * update install details in README, docs * Updated optimizer bounds and let user provide them. (#84) Co-authored-by: Ian Char <ianchar4@gmail.com> * update default optimizer_bounds for std_recalibrator * format recalibration with black * update test_recalibration to loosen checks * bump version to 0.1.1rc5 * bump version to 0.1.1 * update pip details in README, docs/installation Co-authored-by: Youngseog Chung <youngsec@cs.cmu.edu> Co-authored-by: Ian Char <ianchar4@gmail.com>3 年前
Clean imports and dependencies, fix plotting function, update tests (#83) * update version to 0.1.1rc1 * update requirements * remove extra imports from metrics_calibration.py * split up miscalibration_area function into two * update docstring wording * 1) Remove shapely package dependencies 2) Replace miscalibration area computation in plot_calibration function 3) Remove show argument from plot_calibration function 4) Append prop_type argument in plot_calibration function * 1) Remove unnecessary arguments in plot_sharpness function 2) Make tests for filter_subset usages. * bump version to 0.1.1rc2 * blackify code * update recalibration tests for scipy update * bump version to 0.1.1rc3 * remove setup.py, link pyproject.toml to requirements * update README dev install command * bump version to 0.1.1rc4 * add requirements back into pyproject.toml, remove requirements.txt * remove requirements ref in requirements_dev * update install details in README, docs * Updated optimizer bounds and let user provide them. (#84) Co-authored-by: Ian Char <ianchar4@gmail.com> * update default optimizer_bounds for std_recalibrator * format recalibration with black * update test_recalibration to loosen checks * bump version to 0.1.1rc5 * bump version to 0.1.1 * update pip details in README, docs/installation Co-authored-by: Youngseog Chung <youngsec@cs.cmu.edu> Co-authored-by: Ian Char <ianchar4@gmail.com>3 年前
Clean imports and dependencies, fix plotting function, update tests (#83) * update version to 0.1.1rc1 * update requirements * remove extra imports from metrics_calibration.py * split up miscalibration_area function into two * update docstring wording * 1) Remove shapely package dependencies 2) Replace miscalibration area computation in plot_calibration function 3) Remove show argument from plot_calibration function 4) Append prop_type argument in plot_calibration function * 1) Remove unnecessary arguments in plot_sharpness function 2) Make tests for filter_subset usages. * bump version to 0.1.1rc2 * blackify code * update recalibration tests for scipy update * bump version to 0.1.1rc3 * remove setup.py, link pyproject.toml to requirements * update README dev install command * bump version to 0.1.1rc4 * add requirements back into pyproject.toml, remove requirements.txt * remove requirements ref in requirements_dev * update install details in README, docs * Updated optimizer bounds and let user provide them. (#84) Co-authored-by: Ian Char <ianchar4@gmail.com> * update default optimizer_bounds for std_recalibrator * format recalibration with black * update test_recalibration to loosen checks * bump version to 0.1.1rc5 * bump version to 0.1.1 * update pip details in README, docs/installation Co-authored-by: Youngseog Chung <youngsec@cs.cmu.edu> Co-authored-by: Ian Char <ianchar4@gmail.com>3 年前
update CONTRIBUTING instructions Update CONTRIBUTING to account for new branches and other workflow changes.3 年前
Create LICENSE5 年前
Clean imports and dependencies, fix plotting function, update tests (#83) * update version to 0.1.1rc1 * update requirements * remove extra imports from metrics_calibration.py * split up miscalibration_area function into two * update docstring wording * 1) Remove shapely package dependencies 2) Replace miscalibration area computation in plot_calibration function 3) Remove show argument from plot_calibration function 4) Append prop_type argument in plot_calibration function * 1) Remove unnecessary arguments in plot_sharpness function 2) Make tests for filter_subset usages. * bump version to 0.1.1rc2 * blackify code * update recalibration tests for scipy update * bump version to 0.1.1rc3 * remove setup.py, link pyproject.toml to requirements * update README dev install command * bump version to 0.1.1rc4 * add requirements back into pyproject.toml, remove requirements.txt * remove requirements ref in requirements_dev * update install details in README, docs * Updated optimizer bounds and let user provide them. (#84) Co-authored-by: Ian Char <ianchar4@gmail.com> * update default optimizer_bounds for std_recalibrator * format recalibration with black * update test_recalibration to loosen checks * bump version to 0.1.1rc5 * bump version to 0.1.1 * update pip details in README, docs/installation Co-authored-by: Youngseog Chung <youngsec@cs.cmu.edu> Co-authored-by: Ian Char <ianchar4@gmail.com>3 年前
Clean imports and dependencies, fix plotting function, update tests (#83) * update version to 0.1.1rc1 * update requirements * remove extra imports from metrics_calibration.py * split up miscalibration_area function into two * update docstring wording * 1) Remove shapely package dependencies 2) Replace miscalibration area computation in plot_calibration function 3) Remove show argument from plot_calibration function 4) Append prop_type argument in plot_calibration function * 1) Remove unnecessary arguments in plot_sharpness function 2) Make tests for filter_subset usages. * bump version to 0.1.1rc2 * blackify code * update recalibration tests for scipy update * bump version to 0.1.1rc3 * remove setup.py, link pyproject.toml to requirements * update README dev install command * bump version to 0.1.1rc4 * add requirements back into pyproject.toml, remove requirements.txt * remove requirements ref in requirements_dev * update install details in README, docs * Updated optimizer bounds and let user provide them. (#84) Co-authored-by: Ian Char <ianchar4@gmail.com> * update default optimizer_bounds for std_recalibrator * format recalibration with black * update test_recalibration to loosen checks * bump version to 0.1.1rc5 * bump version to 0.1.1 * update pip details in README, docs/installation Co-authored-by: Youngseog Chung <youngsec@cs.cmu.edu> Co-authored-by: Ian Char <ianchar4@gmail.com>3 年前

不确定性工具箱

官网, 教程, 和 文档     

**不确定性工具箱**

一个用于预测性不确定性量化、校准、评估指标与可视化的Python库。 同时包括:术语词典和相关论文及参考资料合集(docs/paper_list.md)。


许多机器学习方法会返回带有某种形式不确定性的预测,如分布或置信区间。这就引出了一些问题:如何决定最佳的预测不确定性是什么?什么是“最佳”或“理想”的不确定性?我们的不确定性是否准确并且**校准良好**?

不确定性工具箱提供了标准指标来量化和比较预测性不确定性估计值,提供这些指标的直觉,生成这些指标和不确定性的可视化,并实现简单的“再校准”程序以改进这些不确定性。目前该库专注于回归任务。

工具箱内容

不确定性工具箱包含:

  1. 术语词典,关于预测不确定性量化的相关术语。
  2. 预测不确定性评估的指标
  3. 预测不确定性估计值和指标的可视化
  4. 改进预测器校准的再校准方法。
  5. 相关方法和指标的paper列表

安装

不确定性工具箱需要Python 3.6+。仅安装包本身,可以运行:

pip install uncertainty-toolbox

要完整安装,包括示例、测试和最新更新,运行:

git clone https://github.com/uncertainty-toolbox/uncertainty-toolbox.git
cd uncertainty-toolbox
pip install -e . -r requirements/requirements_dev.txt

请注意,上述命令要求pip版本至少为21.3。

验证正确安装,可以通过运行测试套件

source shell/run_all_tests.sh

快速开始

import uncertainty_toolbox as uct

# 加载包含100个预测值、不确定性、真实值的示例数据集
predictions, predictions_std, y, x = uct.data.synthetic_sine_heteroscedastic(100)

# 计算所有不确定性指标
metrics = uct.metrics.get_all_metrics(predictions, predictions_std, y)

此示例计算了预测值向量(predictions)及其关联不确定性(predictions_std,标准差向量)的指标,相对于一组相应的实际值y

Colab笔记本: 您还可以查看这个Colab笔记本,它演示了不确定性工具箱的一个使用案例。

指标

不确定性工具箱提供了多个指标来量化和比较预测不确定性估计值。例如,get_all_metrics函数会返回:

  1. 平均校准平均绝对校准误差,校准误差平方根,错位面积
  2. 对抗性群体校准对抗性群体平均绝对校准误差,对抗性群体校准误差平方根
  3. 锐度期望标准偏差
  4. 适当评分规则负对数似然,连续排名概率得分,检查分数,间隔得分
  5. 准确性平均绝对误差,均方根误差,中位绝对误差,决定系数,相关系数

可视化

以下是一些由不确定性工具箱提供的可视化示例。参见此示例代码以重现这些图表。

过度自信不确定性过小

低估不确定性过大

校准良好

对于以上三种情况,以下是几个校准指标:

平均绝对校准误差 (MACE) 校准误差平方根 (RMSCE) 错位面积 (MA)
过度自信 0.19429 0.21753 0.19625
低估 0.20692 0.23003 0.20901
校准良好 0.00862 0.01040 0.00865

再校准

以下是不确定性工具箱提供的再校准过程的结果,该过程可转换一组预测不确定性以改善平均校准。算法基于等距回归,如Kuleshov等人所提议的。

参见此示例代码以重现这些图表。

重新校准过度自信的预测

平均绝对校准误差 (MACE) 校准误差平方根 (RMSCE) 错位面积 (MA)
再校准前 0.19429 0.21753 0.19625
再校准后 0.01124 0.02591 0.01117

重新校准低估的预测

平均绝对校准误差 (MACE) 校准误差平方根 (RMSCE) 错位面积 (MA)
再校准前 0.20692 0.23003 0.20901
再校准后 0.00157 0.00205 0.00132

贡献

我们非常欢迎并感谢社区的贡献!请参考我们的贡献指南,了解如何参与进来。

引用

如果你觉得这个工具箱对你有所帮助,请引用以下论文:

@article{chung2021uncertainty,
  title={Uncertainty Toolbox: 一个开源库,用于评估、可视化和改进不确定性量化},
  author={Chung, Youngseog 和 Char, Ian 及 Guo, Han 和 Schneider, Jeff 和 Neiswanger, Willie},
  journal={arXiv preprint arXiv:2109.10254},
  year={2021}
}

此外,以下是推动该工具箱开发的相关论文:

@article{chung2020beyond,
  title={超越Pinball损失:用于校准不确定性量化的分位数方法},
  author={Chung, Youngseog 和 Neiswanger, Willie 及 Char, Ian 和 Schneider, Jeff},
  journal={arXiv preprint arXiv:2011.09588},
  year={2020}
}

@article{tran2020methods,
  title={材料属性预测的不确定性量化比较方法},
  author={Tran, Kevin 和 Neiswanger, Willie 及 Yoon, Junwoong 和 Zhang, Qingyang 及 Xing, Eric 和 Ulissi, Zachary W},
  journal={Machine Learning: Science and Technology},
  volume={1},
  number={2},
  pages={025006},
  year={2020},
  publisher={IOP Publishing}
}

致谢

Uncertainty Toolbox的发展得到了以下机构的支持

               
   

下载使用量

0

项目总下载次数(含Clone、Pull、 zip 包及 release 下载),每日凌晨更新

语言类型

Python99.92%
Shell0.08%