Échantillonnage À Partir De la Distribution Normale À l’Aide de la Transformation Box-Muller
Confidentialité & Cookies
Ce site utilise des cookies. En continuant, vous acceptez leur utilisation. En savoir plus, y compris comment contrôler les cookies.
La Distribution normale est le cheval de bataille de nombreuses analyses statistiques courantes et pouvoir tirer des échantillons de cette distribution est au cœur de nombreux algorithmes statistiques / d’apprentissage automatique. Un certain nombre de méthodes ont été développées pour échantillonner à partir de la distribution normale, notamment l’échantillonnage par transformée inverse, l’algorithme de Ziggurat et la Méthode du Ratio (une technique d’échantillonnage par rejet). Dans cet article, nous nous concentrerons sur une méthode élégante appelée la transformation de Box-Muller.
Un rapide examen des coordonnées cartésiennes et polaires.
Avant de pouvoir parler de l’utilisation de la transformée de Box-Muller, rafraîchissons notre compréhension de la relation entre les coordonnées cartésiennes et polaires. Vous vous souvenez peut-être de la géométrie que si x et y sont deux points du plan cartésien, ils peuvent être représentés en coordonnées polaires avec un rayon et un angle
en utilisant les relations suivantes:
, et donc
Notez que si et
, nous mappons les valeurs contenues dans le cercle unité, comme indiqué dans la figure ci-dessous. Notez également que des variables aléatoires dans un tel cercle peuvent être générées en transformant des valeurs échantillonnées à partir de la distribution uniforme. Plus précisément, les rayons peuvent être échantillonnés à partir de
et l’angle peut être échantillonné à partir de
. Un mécanisme similaire (c’est-à-dire dessiner des points dans un cercle en utilisant des variables uniformes) est au cœur de la transformée de Box-Muller pour échantillonner des variables aléatoires normales.

Exemple de relation entre les coordonnées cartésiennes et polaires
Dessiner des échantillons normalement distribués avec la transformée de Box-Muller
Ok, maintenant que nous avons discuté de la façon dont les coordonnées cartésiennes sont représentées en coordonnées polaires, passons à la façon dont nous pouvons utiliser cette relation pour générer des variables aléatoires. L’échantillonnage de Box-Muller est basé sur la représentation de la distribution conjointe de deux variables cartésiennes aléatoires normales standard indépendantes et
en coordonnées polaires. La distribution conjointe (qui est symétrique circulaire) est:
Si nous remarquons que le terme dans le numérateur de l’exposant est égal à
(comme ci-dessus), nous pouvons faire le lien entre la représentation cartésienne de la distribution normale conjointe et sa représentation polaire:
qui est le produit de deux fonctions de densité, une distribution exponentielle sur des rayons carrés:
et une répartition uniforme sur les angles:
tout comme ceux mentionnés ci-dessus lors de la génération de points sur le cercle unité. Maintenant, si nous établissons un autre lien entre la distribution exponentielle et la distribution uniforme, à savoir que:
alors
Cela nous donne un moyen de générer des points à partir de la distribution gaussienne conjointe en échantillonnant à partir de deux distributions uniformes indépendantes, une pour et une autre pour
, et en les transformant en coordonnées cartésiennes via les relations ci-dessus. En détail, la procédure se déroule comme suit:
- Dessiner,
- Transformez les variables en représentation de rayon et d’angle
, et
- Transformez le rayon et l’angle en coordonnées cartésiennes :
Quels résultats sont deux variables aléatoires normales indépendantes, et
. Une implémentation MATLAB de l’algorithme Box-Muller est présentée ci-dessous:
% NORMAL SAMPLES USING BOX-MUELLER METHOD% DRAW SAMPLES FROM PROPOSAL DISTRIBUTIONu = rand(2,100000);r = sqrt(-2*log(u(1,:)));theta = 2*pi*u(2,:);x = r.*cos(theta);y = r.*sin(theta);% DISPLAY BOX-MULLER SAMPLESfigure% X SAMPLESsubplot(121);hist(x,100);colormap hot;axis squaretitle(sprintf('Box-Muller Samples Y\n Mean = %1.2f\n Variance = %1.2f\n Kurtosis = %1.2f',mean(x),var(x),3-kurtosis(x)))xlim()% Y SAMPLESsubplot(122);hist(y,100);colormap hot;axis squaretitle(sprintf('Box-Muller Samples X\n Mean = %1.2f\n Variance = %1.2f\n Kurtosis = %1.2f',mean(y),var(y),3-kurtosis(y)))xlim()

Échantillons de Box-Muller pour une distribution normale
Emballage
La sortie du code MATLAB est indiquée ci-dessus. Notez que les premier, deuxième et quatrième moments centraux (moyenne, variance et kurtose) des échantillons générés sont compatibles avec la normale standard. La transformée de Box-Muller est un autre exemple de la façon dont les variables uniformes sur l’intervalle (0,1) peuvent être transformées afin d’échantillonner à partir d’une distribution plus compliquée.
Write a Reply or Comment