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

如何通过T检验判断两种Jacobi迭代算法哪个统计上显著更快?

如何检验哪种算法运行时间显著更快

要明确判断两种算法中哪一种在统计上显著更快,你需要将双尾t检验替换为单尾t检验——因为单尾检验支持带有方向性的假设验证(比如“算法A的平均运行时间显著小于算法B”),而双尾检验只能判断两者均值是否存在差异,无法指明方向。

步骤1:设定方向性假设

先明确你要验证的方向,比如:

  • 原假设(H₀):算法2的平均运行时间 ≥ 算法1的平均运行时间(即算法2并不更快)
  • 备择假设(H₁):算法2的平均运行时间 < 算法1的平均运行时间(即算法2显著更快)

步骤2:用statsmodels实现单尾t检验

ttest_ind函数支持通过alternative参数指定单尾检验的方向:

  • alternative='smaller':检验第一个样本的均值是否显著小于第二个样本
  • alternative='larger':检验第一个样本的均值是否显著大于第二个样本

以下是针对你的示例修改后的代码:

from statsmodels.stats.weightstats import ttest_ind

# 示例运行时间(单位:秒)
algorithm_1_rtimes = [5, 5.5, 4.9]
algorithm_2_rtimes = [1.2, 1.1, 0.9]

# 检验:算法2的平均运行时间是否显著小于算法1(即算法2更快)
t_stat, pvalue, df = ttest_ind(algorithm_2_rtimes, algorithm_1_rtimes, alternative='smaller')

alpha = 0.05  # 常用显著性水平
if pvalue < alpha:
    print("拒绝原假设:算法2在统计上显著更快")
else:
    print("无法拒绝原假设:没有足够证据表明算法2更快")

关键说明

  1. p值解读:单尾检验的p值已经对应你设定的方向,无需像双尾检验那样手动除以2。只要p值小于显著性水平(通常取0.05),就可以拒绝原假设,支持备择假设。
  2. 假设方向灵活调整:如果你想验证“算法1显著更慢”,等价于“算法2显著更快”,也可以换一种写法:
    # 检验:算法1的平均运行时间是否显著大于算法2
    t_stat, pvalue, df = ttest_ind(algorithm_1_rtimes, algorithm_2_rtimes, alternative='larger')
    

注意事项

  • 样本量与独立性:建议重复运行算法至少20-30次,确保样本量足够;每次运行时尽量保持环境一致(如关闭其他程序、固定输入规模),避免外部因素干扰运行时间的稳定性。
  • 前提条件验证:t检验要求数据近似正态分布(样本量较大时可放宽)。如果样本量小且数据非正态,建议改用非参数检验(如Mann-Whitney U检验)。
  • 方差齐性:ttest_ind默认使用Welch's t检验(不假设两组方差相等),如果确认两组方差齐性,可以设置equal_var=True使用合并方差t检验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:25:22