【问题标题】:Python numpy.var returning wrong valuesPython numpy.var 返回错误的值
【发布时间】:2014-12-03 20:35:19
【问题描述】:

我正在尝试对一组 3 个数字进行简单的方差计算:

numpy.var([0.82159889, 0.26007962, 0.09818412])

返回

0.09609366366174843

然而,当你计算方差时,它实际上应该是

0.1441405

看似如此简单的事情,但我还没有找到答案。

【问题讨论】:

    标签: python numpy statistics


    【解决方案1】:

    正如documentation 解释的那样:

    ddof : int, optional
        "Delta Degrees of Freedom": the divisor used in the calculation is
        ``N - ddof``, where ``N`` represents the number of elements. By
        default `ddof` is zero.
    

    所以你有:

    >>> numpy.var([0.82159889, 0.26007962, 0.09818412], ddof=0)
    0.09609366366174843
    >>> numpy.var([0.82159889, 0.26007962, 0.09818412], ddof=1)
    0.14414049549262264
    

    这两种约定都很常见,因此您始终需要检查您正在使用的任何语言的包正在使用哪个约定。

    【讨论】:

    • 谢谢!在我回来查看答案之前我只是想通了。
    【解决方案2】:

    np.var 默认计算总体方差。

    平方误差之和可以如下计算:

    >>> vals = [0.82159889, 0.26007962, 0.09818412]
    >>> mean = sum(vals)/3.0
    >>> mean
    0.3932875433333333
    >>> sum((mean-val)**2 for val in vals)
    0.2882809909852453
    >>> sse = sum((mean-val)**2 for val in vals)
    

    这是总体方差:

    >>> sse/3 
    0.09609366366174843
    >>> np.var(vals)
    0.09609366366174843
    

    这是样本方差:

    >>> sse/(3-1)
    0.14414049549262264
    >>> np.var(vals, ddof=1)
    0.14414049549262264
    

    You can read more about the difference here.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-02
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多