标准偏差计算错误

时间:2015-04-27 21:43:19

标签: python math standard-deviation

我想弄清楚为什么这个过程会给我一个错误的答案。

对于[1,2,3,4,5]我得到1.2而不是1.414

def standard_deviation(number_list):
  average = sum(number_list) / float(len(number_list))
  stdev = 0
  for value in number_list:
      stdev += math.sqrt((average - value)**2) / float(len(number_list))
  return stdev

standard_deviation([1,2,3,4,5])

1 个答案:

答案 0 :(得分:3)

您错误地实施了公式。

定义是"标准偏差是平均偏差平均值的平方根。" This numpy page explains it well (see the Notes section).

代码math.sqrt((average - value)**2)没有做你想要的事情; sqrt和** 2相互抵消,结果只有abs(average-value)

numpy页面简洁地将实现描述为std = sqrt(mean(abs(x - x.mean())**2))

以下对代码的更正将更有效:

def standard_deviation(number_list):
  average = sum(number_list) / float(len(number_list))
  sqdev = 0
  for value in number_list:
      sqdev += (average-value)**2
  sqdev = sqdev / float(len(number_list))
  return math.sqrt(sqdev)