Supposons d'abord que vous souhaitez échantillonner dans
x + y + z = 1
0 ≤ x ≤ 1
0 ≤ y ≤ 1
0 ≤ z ≤ 1
Cela ne fait pas une grande différence, car le point d'échantillonnage se trouvera toujours dans votre zone demandée avec une forte probabilité.
Il vous reste maintenant à échantillonner un point d'un simplexe . Dans l'exemple 3D, vous obtenez un simplexe 2D (triangle) réalisé en 3D.
Comment choisir un point uniformément au hasard a été discuté dans ce billet de blog (voir les commentaires).
Pour votre problème, cela signifierait que vous prenez nombres aléatoires de l'intervalle ( 0 , 1 ) , puis vous ajoutez un 0 et 1 pour obtenir une liste de n + 1 nombres. Vous triez la liste, puis vous enregistrez les différences entre deux éléments consécutifs. Cela vous donne une liste de n nombres qui totalisera 1 . De plus, cet échantillonnage est uniforme. Cette idée peut être trouvée dans Donald B. Rubin, The Bayesian bootstrap Ann. Statist. 9, 1981, 130-134.n - 1( 0 , 1 )01n + 1n1
Par exemple ( ) vous avez les trois nombres aléatoires puis vous obtenez la séquence triée et cela donne les différences , et par construction ces quatre nombres résument à 1.n = 40.4 0.2 0.1
0 0.1 0.2 0.4 1
0.1 0.1 0.2 0.6
Une autre approche est la suivante: premier échantillon de l'hypercube (c'est-à-dire que vous oubliez x+y+z=1
), puis normaliser le point d'échantillonnage. La normalisation est une projection du hypercube au d - 1- simplex. Il devrait être intuitivement clair que les points au centre du simplex ont plus de "points de pré-image" qu'à l' extérieurréd−1. Par conséquent, si vous échantillonnez uniformément à partir de l'hypercube, cela ne vous donnera pas un échantillonnage uniforme dans le simplex. Cependant, si vous échantillonnez à partir de l'hypercube avec une distribution exponentielle appropriée, cet effet s'annule. La figure vous donne une idée de la façon dont les deux méthodes seront échantillonnées. Cependant, je préfère la méthode de "tri" en raison de sa forme simple. Il est également plus facile à mettre en œuvre.