ministat && Student's t-test

一个基础问题: 假设两段代码实现了同一个功能,如何从实验的角度,证明其中一个比另一个效率高

最简单的办法,把第一段代码运行m次,然后对运行时间求均值得到t1。然后把第一段代码运行n次,然后对运行时间求均值得到t2。比较t1和t2,如果有显著差别,那么小的获胜。

这里存在一个问题,实验本身是有误差的,这个误差相比于|t1-t2|而言,可能使得我们的试验结果完全是无意义的。

FreeBSD从8.0开始把一个叫做ministat的工具作为base system的一部分发布。这个工具从5.2开始就有了,但是未得到足够的重视。从man手册引一段话过来:

“The ministat command was written by Poul-Henning Kamp out of frustration over all the bogus benchmark claims made by people with no understanding of the importance of uncertainty and statistics.”

我也属于“with no understanding of the importance of uncertainty and statistics”的人之一。大学里学过4章数学统计,但老师基本一带而过,而我主要靠考试前一天晚上的3小时读完2本书,so…

T分布我学过:假设ζ、z是相互独立的随机变量,其中ζ服从N(0,1)的正态分布,z服从自由度为n的χ2分布,则t=ζ/\sqrt(z/n)称为自由度为n的T分布。

ministat用的是two sample T-test。但是我没弄明白T分布和T-test之间的关系。我手头没有书讲的有T-test。

我用ministat给的样本数据按照http://www.chem.uoa.gr/applets/AppletTtest/Appl_Ttest2.html这个网页上所说的公式算出了experimental t value=1.551633540,它的自由度是5+7-2=10,按表格来看,95%的置信度下10个自由度的t的理论值是1.812,实验值大于理论值,所以假设成立,即均值不存在显著差异。

用maple的计算结果如下:

> TwoSampleTTest(data, data2, 0, confidence = 0.95, output = 'report');
Standard T-Test on Two Samples (Unequal Variances)



Null Hypothesis:
Sample drawn from populations with difference of means equal to 0
Alt. Hypothesis:
Sample drawn from population with difference of means not equal to 0

Sample sizes: 7, 5
Sample means: 300, 540
Sample standard devs.: 238.048, 299.082
Difference in means: -240
Distribution: StudentT(7.425428322)
Computed statistic: -1.48884
Computed pvalue: 0.177722
Confidence interval: -616.7928739 .. 136.7928739
(difference of population means)

貌似它后面的处理步骤不一样,我不知道他的T分布的参数7.425428322是怎么算出来的,之下的数字也完全不明白怎么算的。
而且ministat的输出中:

Difference at 80.0% confidence
240 +/- 212.215
80% +/- 70.7384%
(Student's t, pooled s = 264.159)

这个我也看不明白。pooled s我会算,240就是means difference,但是212怎么算出来的?

太晚了,先去睡。明儿再说

此博客中的热门博文

在windows下使用llvm+clang

少写代码,多读别人写的代码

tensorflow distributed runtime初窥