Algorithmes Stochastiques Introduction et Mixtures Gaussiennes

Exercice 1

Le but de cet exercice est d'illustrer que toutes les distributions peuvent être approchées par un mélange gaussien (par exemple au sens de la norme $L^1$). Tracer les mélanges gaussiens suivants : 12 mélanges gaussiens à illustrer

In [1]:
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as sps
In [2]:
from TP_gaussian_mixture import *

Densité normale standard

In [3]:
x=np.linspace(-3,3,num=1000)
y=sps.norm.pdf(x,loc=0,scale=1)
plt.plot(x,y)
Out[3]:
[<matplotlib.lines.Line2D at 0x7fd5882e3e48>]

Densité unimodale dissymétrique

A vous de jouer !!!

In [4]:
dissym()

Peigne

In [5]:
peigne()

etc...

Exercice 2 : Simulation de mixture gaussienne

Selon un article de N. Herpin, la taille moyenne des femmes en France en 2001 était de $1,619m$ avec un écart-type de $0,065m$ tandis que celle des hommes était de $1,741m$ avec un écart-type de $0,071m$. La population française était, à peu près à la même époque, constituée de $51,4\%$ de femmes et $48,6\%$ d'hommes.

  • En supposant que la distribution des tailles des femmes (resp. des hommes) soit gaussienne, modéliser la taille d'un individu quelconque de la population par une loi de probabilité.
  • Ecrire une fonction echantillon permettant de simuler $n$ réalisations d'une telle loi.
  • Représenter le résultat de la simulation pour un $n$ de l'ordre de la centaine puis $500$ sous la forme d'un histogramme. Est-ce que cet histogramme ressemble à ce qu'on pourrait obtenir à partir d'une loi normale ?
  • Tracer sur le même graphe les deux gaussiennes du mélange ainsi que la densité ci-dessus.
In [6]:
K=2
mu=[1.619,1.741]
sigma=[.065,.071]
alpha=[.514,.486]
n=int(500)
In [7]:
E=echantillon(K,mu,sigma,alpha,n)

plt.hist(E,bins=round(3*n**(.3)),density=1,histtype="step",color="b")

x=np.linspace(1.3,2.1,num=1000)
y=densite_theorique(K,mu,sigma,alpha,x)
plt.plot(x,y,"r")
Out[7]:
[<matplotlib.lines.Line2D at 0x7fd5a8721908>]