Различные стандартные отклонения для одного и того же ввода от Вольфрама и Нампи - PullRequest
12 голосов
/ 01 января 2011

В настоящее время я работаю над реализацией некоторого алгоритма, написанного на Java на 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

1 Ответ

23 голосов
/ 01 января 2011

Apache и Wolfram делят на N-1, а не на N. Это корректировка степеней свободы, так как вы оцениваете μ Делив на N-1, вы получите объективную оценку стандартного отклонения населения. Вы можете изменить поведение NumPy, используя опцию ddof.

Это описано в документации NumPy:

Среднее квадратическое отклонение обычно рассчитывается как x.sum () / N, где N = len (x). Однако, если ddof указанным делителем N - ddof является используется вместо В стандартной статистике практика, ddof = 1 обеспечивает беспристрастный Оценка дисперсии бесконечное население. ddof = 0 обеспечивает оценка максимального правдоподобия Дисперсия для нормально распределенных переменные. Стандартное отклонение вычисляется в этой функции является квадратный корень из расчетной дисперсии, так что даже при ddof = 1 это не будет объективная оценка стандарта отклонение само по себе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...