You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过均值差异t检验评估算法F1分数及解决NaN结果问题

解决scipy ttest_ind返回NaN的问题

问题根源

stats.ttest_ind 是用来对比两组独立样本均值差异的统计方法,它要求输入的是两组包含多个数据点的数组(比如多次实验/交叉验证得到的F1分数集合),而非单个数值。你现在只传入了算法A和B各一个F1值,程序无法计算样本方差,最终返回NaN。

解决方案

1. 准备合格的样本数据

首先要通过重复实验(比如k折交叉验证)获取两组样本数据:

  • 对算法A进行k次独立评估,得到k个F1分数,组成数组f1_score_Algo_A
  • 对算法B做同样操作,得到数组f1_score_Algo_B

2. 正确调用t检验

用两组数组作为输入,示例代码如下:

from scipy import stats
# 示例:10折交叉验证得到的两组F1分数
f1_score_Algo_A = [0.56, 0.59, 0.58, 0.60, 0.57, 0.59, 0.58, 0.61, 0.57, 0.59]
f1_score_Algo_B = [0.62, 0.65, 0.63, 0.64, 0.61, 0.65, 0.63, 0.66, 0.62, 0.64]

t_value, p_value = stats.ttest_ind(f1_score_Algo_A, f1_score_Algo_B)
print(f'Test statistic is {t_value:.6f}')
print(f'p-value for two tailed test is {p_value:.6f}')

3. 结果解读

  • 如果p值小于预设的显著性水平(通常取0.05),说明两组算法的F1分数均值存在显著差异
  • 结合你给出的单值来看,算法B的F1分数更高,若样本数据支持显著差异,即可判断算法B性能更优

注意

如果确实只能获取单个F1值,t检验完全不适用——统计检验需要样本分布来估计误差,单个数据点无法提供统计显著性的依据,此时只能直接比较数值大小,但结论不具备统计说服力。

内容的提问来源于stack exchange,提问作者Haseeb Tariq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:24:53