如何通过均值差异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
相关产品推荐
相关产品推荐

