Bjö*_*lex 12 python java statistics numpy
我目前正在重新实现一些用Python编写的算法.一步是计算值列表的标准偏差.最初的实现使用DescriptiveStatistics.getStandardDeviation了Apache Math 1.1库.我使用numpy 1.5的标准偏差.问题是,它们为相同的输入提供(非常)不同的结果.我的样本是这样的:
[0.113967640255, 0.223095775796, 0.283134228235, 0.416793887842]
我得到以下结果:
numpy           : 0.10932134388775223
Apache Math 1.1 : 0.12620366805397404
Wolfram Alpha   : 0.12620366805397404
我与Wolfram Alpha核实了第三个意见.我不认为这种差异可以仅通过精确来解释.有谁知道为什么会这样,我能做些什么呢?
编辑:在Python中手动计算它会得到相同的结果:
>>> from math import sqrt
>>> v = [0.113967640255, 0.223095775796, 0.283134228235, 0.416793887842]
>>> mu = sum(v) / 4
>>> sqrt(sum([(x - mu)**2 for x in v]) / 4)
0.10932134388775223
另外,关于不正确使用它:
>>> from numpy import std
>>> std([0.113967640255, 0.223095775796, 0.283134228235, 0.416793887842])
0.10932134388775223
Tri*_*tan 23
Apache和Wolfram除以N-1而不是N.这是一个自由度调整,因为你估计μ.除以N-1,您可以获得人口标准差的无偏估计.您可以使用该ddof选项更改NumPy的行为.
这在NumPy文档中描述:
平均偏差通常计算为x.sum()/ N,其中N = len(x).但是,如果指定了ddof,则使用除数N - ddof.在标准统计实践中,ddof = 1提供了无穷大群体方差的无偏估计.ddof = 0提供正态分布变量的方差的最大似然估计.在此函数中计算的标准差是估计方差的平方根,因此即使ddof = 1,它也不会是标准偏差本身的无偏估计.
| 归档时间: | 
 | 
| 查看次数: | 2426 次 | 
| 最近记录: |