【问题标题】:Calculating the actual average value计算实际平均值
【发布时间】:2010-11-21 16:47:02
【问题描述】:

我有一组相对较少(约 100 个值)的整数:每个整数代表我运行的测试持续了多长时间(以毫秒为单位)。

计算平均值的简单算法是将所有n值相加,然后将结果除以n,但这并没有考虑到一些可笑的高/低值一定是错误的,应该得到丢弃。

有哪些算法可用于估计实际平均值?

【问题讨论】:

  • 没有“实际”平均值这样的东西:如果不做一些假设,您无法严格区分统计异常值和实际数据。什么构成实际数据,什么是错误最终是一个概率决定。此外,这不是严格意义上的编程问题,而是关于统计的问题。
  • +1 stakx。另外,我可能会建议“荒谬”值是“错误”的假设可能是不正确的。我建议只运行更多测试(1000 或 10000)并按原样获取 mean 值。

标签: algorithm language-agnostic estimation average


【解决方案1】:

正如您所说,您可以丢弃所有偏离平均值大于给定值的值,然后重新计算平均值。另一个有趣的值是中位数,它是最常见的值。

【讨论】:

  • 模式是最频繁的值(或值)。
  • @peoro,是的,但它并不那么容易。寻找标准偏差en.wikipedia.org/wiki/Standard_deviation 有几个数学库与那个
  • 对于每组数据,丢弃 Sigma(绝对偏差)高于给定数字的值是有意义的,但这取决于事件类型。没有万能的解决方案。
  • @Uberto - 甚至您的链接也将中位数描述为“中位数被描述为将样本、总体或概率分布的上半部分与下半部分分开的数值。”它是中间值(并给出它的名字,这是有道理的)。来自en.wikipedia.org/wiki/Mode_(statistics):“众数是数据集或概率分布中出现频率最高的值。”
【解决方案2】:

这取决于您测试的不同条件。这是概率论的任务。 最简单的方法之一是尝试计算 median,您可以处理可笑的高/低值。看看下面的链接: Wiki about median

【讨论】:

    【解决方案3】:

    正如您所指出的,如果有非常高/低的值,算术平均值就不好。 正如有人建议的那样,您可以计算中位数,即在您的值的排序列表中,“中间”值(如果您的集合包含不均匀数量的项目)或两个“中间”值的算术平均值(否则)。

    另一种方法是删除最低和最高的五个percentiles,然后计算其余的算术平均值。

    【讨论】:

      【解决方案4】:

      一些选项:

      • 首先丢弃 N 个最高和最低值,然后计算其余的算术平均值。将 N 设置为合适的值,以便丢弃例如 1% 或 10% 的值。
      • 使用median 或中间值。
      • 使用geometric mean 减少异常值的权重。

      维基百科列出了some ways 来计算不同的“平均”值

      【讨论】:

        猜你喜欢
        • 2016-02-24
        • 1970-01-01
        • 2013-01-14
        • 2012-06-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多