计算极值p的广义均值

时间:2011-02-24 17:21:13

标签: statistics

如何计算极值p(非常接近0或非常大)的generalized mean,并计算合理的误差?

5 个答案:

答案 0 :(得分:1)

根据your link p 的限制为0是几何平均值,其中bounds是派生的。

p 达到无穷大的限制是最大值。

答案 1 :(得分:1)

我怀疑如果你对p的非常大或小的值感兴趣,最好在输入数值之前对广义均值公式进行某种形式的代数操作。

例如,在小p限制中,可以显示广义均值趋向于乘积x_1 * x_2 * ... x_n的第n个根。 p中的高阶项涉及log(x_i)的和和乘积,其在计算时也应该是相对数值稳定的。事实上,我认为p中的一阶展开与log(x_i)的方差有一个简单的关系:

enter image description here

如果将此公式应用于从[0.2,2]范围内均匀绘制的一组100个随机数,则会得到如下趋势:

Comparison of simple formula with asymptotic approximation

这里显示渐近公式变得非常精确,p小于约0.3,并且简单公式仅在p小于约1e-10时失败。

大p的情况由具有最大幅度的x_i控制(让我们称之为索引i_max)。人们可以重新排列广义均值公式,采用以下形式,对于大的p:

具有较少的病理行为

Rearranged generalized mean formula

如果将这个(使用包括numpy.log1p的标准numpy例程)应用于[0.2,2.0]上的另外100个均匀分布的样本,则会发现重新排列的公式基本上与简单公式完全一致,但仍然有效当计算x_i的幂时,简单公式溢出的p值要大得多。

Generalized mean for large p

(请注意,左侧曲线的简单公式的蓝色曲线向上移动了0.1,因此可以看到它因溢出而在何处结束。对于小于约1000的p,两条曲线将无法区分。 )

答案 2 :(得分:0)

我认为这里的答案应该是使用递归解决方案。与mean(1,2,3,4)= mean(mean(1,2),mean(3,4))的方式相同,你可以对广义均值进行这种递归。这给你买的是你不需要做很多真正大数的和你减少创建溢出的可能性。此外,使用浮点数时的另一个危险是添加非常不同大小的数字(或减去非常相似大小的数字)。因此,为了避免这些类型的舍入错误,在尝试计算广义均值之前,可能有助于对数据进行排序。

答案 3 :(得分:0)

这是预感:

首先将所有数字转换为基数p中的表示形式。现在要提升到1 / p或p的幂,你只需要移动它们 - 这样你就可以很容易地完成所有的力量而不会失去精确度。

在基础p中计算出你的平均值,然后将结果转换回基数2。


如果这不起作用,那就更不实际了:

尝试计算离散傅里叶变换,并将其与输入向量的离散傅里叶变换相关联。

答案 4 :(得分:0)

我一直在努力解决同样的问题。这是我如何处理这个: 设gmean_p(x1,...,xn)为广义均值,其中p为实而非0,x1,.. xn为非负。对于M> 0,我们有gmean_p(x1,...,xn)= M * gmean_p(x1 / M,...,xn / M),其中后一种形式可用于减少计算误差。对于大p,我使用M = max(x1,...,xn),对于p接近0,我使用M = mean(x1,... xn)。如果M = 0,只需向它添加一个小的正常数。这对我来说很有意义。