什么时候使用 Statistics#compareTo(Statistics, double) 比较统计数据才有意义?
When does it make sense to use Statistics#compareTo(Statistics, double) to compare Statistics?
我想知道在什么情况下使用 confidence
来比较 Statistics
比较有趣,这要归功于方法 Statistics#compareTo(Statistics, double)。使用这种方法来比较 2 种方法的性能是否有意义?此方法中 confidence
的确切 purpose/meaning 是多少?
如 javadoc 所述,它的值为 confidence interval。
粗略地说,假设您有两种方法 运行 次的两个分布(又名基准 运行s)。默认情况下,JMH 假设它是具有某些参数(均值和方差)的正态分布。但是分布不是数字:你不能将一个平均值与另一个平均值进行比较并说 "Hey, first mean is smaller than second one, thus first approach is better in average!"。首先你应该证明它们不属于同一个分布(即使它们(样本,而不是分布)的均值略有不同,这仍然是可能的),否则这样的比较是没有意义的。对于这样的证明,使用了特殊的 statistical test。但是只要test处理的是样本,而不是实际的分布,test就不能说"Two data sets don't belong to the same distribution",test只能说"Two data sets don't belong to the same distribution with 99% probability"。这 99%(或任何其他)实际上是您要求的信心。
所以,基本上,s1.compareTo(s2, 0.9) == 1
意味着 s1(第一个基准 运行 次)的平均 运行 时间小于第二个 的概率为 90%(10% 可能有任何其他结果,不仅相反)。
我想知道在什么情况下使用 confidence
来比较 Statistics
比较有趣,这要归功于方法 Statistics#compareTo(Statistics, double)。使用这种方法来比较 2 种方法的性能是否有意义?此方法中 confidence
的确切 purpose/meaning 是多少?
如 javadoc 所述,它的值为 confidence interval。
粗略地说,假设您有两种方法 运行 次的两个分布(又名基准 运行s)。默认情况下,JMH 假设它是具有某些参数(均值和方差)的正态分布。但是分布不是数字:你不能将一个平均值与另一个平均值进行比较并说 "Hey, first mean is smaller than second one, thus first approach is better in average!"。首先你应该证明它们不属于同一个分布(即使它们(样本,而不是分布)的均值略有不同,这仍然是可能的),否则这样的比较是没有意义的。对于这样的证明,使用了特殊的 statistical test。但是只要test处理的是样本,而不是实际的分布,test就不能说"Two data sets don't belong to the same distribution",test只能说"Two data sets don't belong to the same distribution with 99% probability"。这 99%(或任何其他)实际上是您要求的信心。
所以,基本上,s1.compareTo(s2, 0.9) == 1
意味着 s1(第一个基准 运行 次)的平均 运行 时间小于第二个 的概率为 90%(10% 可能有任何其他结果,不仅相反)。