Kaleidophon/deep-significance

Enabling easy statistical significance testing for deep neural networks.

deep-significance

它是啥: 一个 Python 库,帮助研究人员和工程师使用统计显著性检验来正确比较深度学习模型的性能,而不是仅仅比较平均分数。

为何重要: 深度神经网络对随机种子、超参数和其他随机因素非常敏感。单次运行的分数可能具有误导性。该包提供了严格的统计方法,以确定一个模型是否真的优于另一个模型,还是差异只是偶然造成的。

主要功能:

  • 几乎随机序 (ASO): 一种现代显著性检验,比较整个分数分布,而不仅仅是均值。它返回一个置信度分数(eps_min),表示一个模型在多大程度上优于另一个模型。
  • 经典检验: 用于基于 p 值的假设检验的自助法(bootstrap)和置换-随机化检验。
  • 多重比较校正: Bonferroni 校正,用于处理在多个数据集或模型对上进行测试的情况。
  • 样本量分析: 工具用于估算获得可靠结论所需的运行次数。
  • 兼容性: 与 NumPy、PyTorch、TensorFlow 和 JAX 数组兼容。

工作原理(简化版):

  • 你提供两组分数(例如,多次运行模型 A 和模型 B 的结果)。
  • aso() 函数比较分布并返回一个值 eps_min。如果 eps_min < 0.5,则模型 A 更好;数值越低,你越有信心。
  • 对于多个模型,multi_aso() 会生成成对比较的矩阵。

使用场景:

  • 在多个随机种子下将新模型与基线模型进行比较。
  • 在多个数据集上评估模型,同时避免假阳性。
  • 基于每个样本的分数(例如,每个测试样本的预测)比较模型。
  • 确定在给定置信水平下需要多少次实验运行。

目标用户: 机器学习研究人员、实践者,以及任何需要严格评估和比较神经网络模型的人。

局限性(来自 README): 该包不能保证在所有情况下都优越;它是一个支持结论的工具,而非万能药。它还假设你有多个运行或样本可供比较。

使用示例:

from deepsig import aso
import numpy as np

# 模拟两个模型的分数
model_a_scores = np.random.normal(0.9, 0.8, 5)
model_b_scores = np.random.normal(0, 1, 5)

# 比较
eps_min = aso(model_a_scores, model_b_scores)
# 如果 eps_min < 0.5,模型 A 更好

简而言之: deep-significance 为你提供了统计上可靠的方法来回答这个问题:"我的模型真的更好吗?"

相关

  • 项目
  • 项目
  • 项目
  • 项目