web-dev-qa-db-fra.com

Quel est le point de Norm.fit à Scipy?

Je génère un échantillon aléatoire de données et la traçage de son PDF à l'aide de SCIPY.Stats.norm.fit pour générer mes paramètres LOC et Échelle.

Je voulais voir à quel point mon fichier PDF ressemblerait si je viens de calculer la moyenne et STD à l'aide de NUMPY sans aucun raccord réel. À ma surprise lorsque je trace les deux pdfs et imprimez les deux ensembles de MU et STD, les résultats que je reçois sont exactement les mêmes. Donc, ma question est, quel est le point de Norm.fit si je peux simplement calculer la moyenne et la STD de mon échantillon et obtenez toujours les mêmes résultats?

Ceci est mon code:

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()

Et c'est les résultats que j'ai obtenus:

PDF d'un ensemble de valeurs aléatoires

mu1 = 0.034824979915482716

std1 = 0.9945453455908072

Le point est qu'il existe plusieurs autres distributions à part la distribution normale. SciPy fournit une API cohérente pour apprendre les paramètres de ces distributions à partir de données. (Vous voulez une distribution exponentielle au lieu d'une distribution normale? C'est scipy.stats.expon.fit.)

Tellement sûr, votre chemin fonctionne également car les paramètres de la distribution normale se produisent la moyenne et la déviation type. Mais il s'agit de fournir une interface cohérente entre les distributions, y compris ceux où cela n'est pas vrai.

3
Arya McCarthy