Moyenne et variance, calculées à la main puis contrôlées
Exercice d'entraînement · niveau 2 · mathématiques approfondies (ECG 1re année), chapitre 11 — Informatique et algorithmique · Boucles, arrêt et algorithmes
Énoncé
Écrire deux fonctions calculant la moyenne et la variance empiriques d'un tableau de nombres, sans employer np.mean ni np.var. Les comparer ensuite à ces deux fonctions, et aux valeurs théoriques, sur un échantillon de réalisations d'une loi .
Corrigé
Ce qu'on montre. Qu'une moyenne et une variance sont deux boucles d'accumulation, et que le rapprochement avec les valeurs théoriques est le contrôle attendu par le programme.
Le programme.
import numpy as np
import numpy.random as rd
def moyenne(T):
s = 0.0
for x in T:
s = s + x
return s / len(T)
def variance(T):
m = moyenne(T) # il faut la moyenne AVANT de sommer les carres
s = 0.0
for x in T:
s = s + (x - m) ** 2
return s / len(T)
X = rd.binomial(20, 0.3, 10 ** 5)
print(moyenne(X), np.mean(X), 20 * 0.3) # ~6.00 6.00 6.0
print(variance(X), np.var(X), 20 * 0.3 * 0.7) # ~4.20 4.20 4.2
Ce que chaque colonne contrôle. La première est notre calcul, la deuxième celui de numpy, la troisième la valeur théorique donnée par le cours pour : Les trois doivent coïncider : les deux premières exactement (aux erreurs d'arrondi près), la troisième à la fluctuation d'échantillonnage près.
L'ordre de grandeur de l'écart attendu. La moyenne empirique de variables indépendantes de variance a pour variance , donc pour écart-type . Un écart de quelques millièmes entre moyenne(X) et est donc normal ; un écart de signalerait une erreur de programme, pas un caprice du hasard.
Point délicat : la formule à ne pas employer. On serait tenté d'écrire la variance par Kœnig-Huygens, en accumulant puis en retranchant . C'est mathématiquement exact, mais numériquement mauvais : les deux quantités et sont proches, et leur différence perd des chiffres significatifs. La boucle sur n'a pas ce défaut, car elle somme des quantités déjà petites. C'est aussi la convention de np.var, qui divise par et non par — ce qui explique que les deux résultats coïncident ici.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.