Какой смысл norm.fit в scipy? - PullRequest
2 голосов
/ 26 марта 2020

Я генерирую случайную выборку данных и строю ее pdf с использованием scipy.stats.norm.fit для генерации моих lo c и параметров масштабирования.

Я хотел посмотреть, как будет выглядеть мой pdf по-разному если я только что рассчитал среднее и стандартное значение, используя numpy без какого-либо фактического подбора К моему удивлению, когда я рисую оба файла в формате pdf и печатаю оба набора mu и std, результаты, которые я получаю, абсолютно одинаковы. Итак, мой вопрос: в чем смысл norm.fit, если я могу просто вычислить среднее значение и стандартное отклонение для моей выборки и при этом получить те же результаты?

Это мой код:

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt

data = norm.rvs(loc=0,scale=1,size=200)

mu1 = np.mean(data)

std1 = np.std(data)

print(mu1)
print(std1)

mu, std = norm.fit(data)

plt.hist(data, bins=25, density=True, alpha=0.6, color='g')

xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
q = norm.pdf(x, mu1, std1)
plt.plot(x, p, 'k', linewidth=2)
plt.plot(x, q, 'r', linewidth=1)
title = "Fit results: mu = %.5f,  std = %.5f" % (mu, std)
plt.title(title)

plt.show()

И вот результаты, которые я получил:

Pdf случайного набора значений

mu1 = 0.034824979915482716

std1 = 0.9945453455908072

1 Ответ

3 голосов
/ 26 марта 2020

Дело в том, что есть несколько других распределений, кроме нормального распределения. Scipy предоставляет согласованный API для изучения параметров этих распределений из данных. (Хотите экспоненциальное распределение вместо нормального распределения? Это scipy.stats.expon.fit.)

Так что ваш путь также работает, потому что параметры нормального распределения являются средним и стандартным отклонением. Но речь идет о предоставлении согласованного интерфейса для всех дистрибутивов, включая те, где это не так.

...