近似样本的典型值

Approximate the typical value of a sample

假设我有一个 N 个正实数样本,我想为这些数字找到一个 "typical" 值。当然 "typical" 的定义不是很明确,但可以想到以下更具体的问题:

这些数字的分布使得(粗略地说)它们的一小部分(1-epsilon)是从具有正均值 m > 0 和均方差 sigma << m 的高斯分布中提取的,以及它们的一小部分 epsilon是从其他一些分布中提取的,对于大数字和小数字都是重尾分布。我想估计几个标准偏差内的高斯均值。

一个解决方案是计算中位数,但它是 O(N),常数因子对于中等 N 不是很好,而且它需要相当多的编码。我准备放弃我对代码简单性的估计的精度 and/or 小 N 性能(比如 N 是 10 或 20,我最多有一个或两个异常值)。

你有什么建议吗?

(例如,如果我的离群值仅来自大值,我会计算我的值的对数的平均值并将其取幂。在一些进一步的假设下,这通常会给我一个很好的估计,我可以很容易地计算它,并且具有尖锐的 O(N))。

您可以取除最小值和最大值之外的数字的平均值。公式是 (sum - min - max) / (N - 2),分子中的项可以简单地计算一次(不过要注意浮点数问题)。

我认为您应该重新考虑中位数,使用快速选择或 Blum-Floyd-Pratt-Rivest-Tarjan(正如 Coetzee 在此处实施的那样)。它快速而强大。

如果您需要更快的速度,您可以考虑选择固定数量的随机元素并取它们的中值。这是次线性的(O(1) 或 O(log n),具体取决于模型)并且适用于大型集合。