假设我有一个N个正实数的样本,我想找一个"典型的"这些数字的价值。当然"典型"定义不是很明确,但可以想到以下更具体的问题:
分配数字使得(粗略地说)它们的一部分(1-epsilon)是从高斯绘制的,具有正平均值m> 1。 0和均方差sigma<< m和它们的一小部分epsilon是从一些其他分布中得出的,对于大数和小数都是重尾。我想在几个标准偏差内估计高斯的平均值。
解决方案是计算中值但是当它是O(N)时,常数因子对于中等N不是那么好,而且它需要相当多的编码。我准备放弃对代码简单性和/或小N性能的估计精度(例如,N是10或20,我最多有一两个异常值)。
你有什么建议吗?
(例如,如果我的异常值只来自大值,我会计算我的值的对数的平均值并取幂它。在一些进一步的假设下,这给了我一个很好的估计,我可以计算它容易并且具有尖锐的O(N))。
答案 0 :(得分:2)
您可以采用不包括最小值和最大值的数字的平均值。公式为(sum - min - max)/(N - 2),分子中的项只需一次通过即可计算(注意浮点问题)。
答案 1 :(得分:1)
我认为你应该重新考虑中位数,要么使用quickselect,要么使用Blum-Floyd-Pratt-Rivest-Tarjan(由Coetzee在这里实现)。它快速而强大。
如果你需要更好的速度,你可以考虑选择固定数量的随机元素并取其中位数。这是次线性的(O(1)或O(log n),具体取决于模型),适用于大型集合。