Générer des poids uniformément répartis qui correspondent à l'unité?

14

Il est courant d'utiliser des poids dans des applications comme la modélisation de mélanges et de combiner linéairement des fonctions de base. Les poids doivent souvent obéir à 0 et . Je voudrais choisir au hasard un vecteur de poids \ mathbf {w} = (w_1, w_2,…) à partir d'une distribution uniforme de ces vecteurs.w ii w i = 1 w = ( w 1 , w 2 , )wiwiiwi=1w=(w1,w2,)

Il peut être tentant d'utiliser wi=ωijωjωi U (0, 1), mais comme indiqué dans les commentaires ci-dessous, la distribution de w n'est pas uniforme.

Cependant, étant donné la contrainte iwi=1 , il semble que la dimensionnalité sous-jacente du problème soit n1 , et qu'il devrait être possible de choisir un w en choisissant n1 paramètres selon une certaine distribution et ensuite calculer le w partir de ces paramètres (car une fois que n1 des poids sont spécifiés, le poids restant est entièrement déterminé).

Le problème semble être similaire au problème de sélection de points de sphère (mais, plutôt que de choisir 3 vecteurs dont la norme 2 est l'unité, je veux choisir n -vecteurs dont la norme 1 est l'unité).

Merci!

Chris
la source
3
Votre méthode ne génère pas de vecteur uniformément distribué sur le simplexe. Pour faire ce que vous voulez correctement, le moyen le plus simple est de générer iid variables aléatoires, puis de les normaliser par leur somme. Vous pouvez essayer de le faire en trouvant une autre méthode pour dessiner uniquement variables directement, mais j'ai des doutes concernant le compromis d'efficacité car les variables peuvent être générées très efficacement à partir de varie. E x p ( 1 ) n - 1 E x p ( 1 )nExp(1)n1Exp(1)U(0,1)
Cardinal

Réponses:

22

Choisissez uniformément (au moyen de réels uniformes dans l'intervalle ). Triez les coefficients de sorte que . Ensemblex[0,1]n1n1[0,1]0x1xn1

w=(x1,x2x1,x3x2,,xn1xn2,1xn1).

Parce que nous pouvons récupérer le trié au moyen des sommes partielles du , le mappage està 1; en particulier, son image est le simplexe dans . Étant donné que (a) chaque échange dans un tri est une transformation linéaire, (b) la formule précédente est linéaire et (c) les transformations linéaires préservent l'uniformité des distributions, l'uniformité de implique l'uniformité de sur le simplexe . Notons en particulier que les marginaux de ne sont pas nécessairement indépendants.w i xw ( n - 1 ) ! n - 1 R n x w n - 1 wxiwixw(n1)!n1Rnxw n1w

Tracé de points 3D

Ce tracé de points 3D montre les résultats de 2000 itérations de cet algorithme pour . Les points sont confinés au simplex et sont répartis approximativement uniformément sur celui-ci.n=3


Comme le temps d'exécution de cet algorithme est , il est inefficace pour les grands . Mais cela répond à la question! Une meilleure façon (en général) de générer des valeurs uniformément distribuées sur le simplexe est de tracer réels uniformes sur l'intervalle , calculern n - 1 n ( x 1 , , x n ) [ 0 , 1 ]O(nlog(n))O(n)nn1n(x1,,xn)[0,1]

yi=log(xi)

(ce qui rend chaque positif avec la probabilité , d'où leur somme est presque sûrement non nulle) et fixonsyi1

w=(y1,y2,,yn)/(y1+y2++yn).

Cela fonctionne parce que chaque a une distribution , ce qui implique que a une distribution Dirichlet - et qui est uniforme.yiΓ(1)w(1,1,1)

[Tracé de points 3D 2]

whuber
la source
1
@Chris Si par "Dir (1)" vous voulez dire la distribution de Dirichlet avec des paramètres = , alors la réponse est oui. (α1,,αn)(1,1,,1)
whuber
1
(+1) Un petit commentaire: l'intuition est excellente. Il faudra peut-être faire preuve de prudence dans l'interprétation de a), car il semble que la "transformation linéaire" dans cette partie soit aléatoire . Cependant, ceci est facilement contourné au détriment d'une formalité supplémentaire en utilisant l'interchangeabilité du processus de génération et une certaine propriété d'invariance.
Cardinal
1
Plus explicitement: pour les distributions de densité , la densité des statistiques d'ordre d'un échantillon iid de taille est . Dans le cas de , la distribution des statistiques d'ordre est uniforme sur un polytope. Pris à partir de ce point, les transformations restantes sont déterministes et le résultat suit. fnn!f(x1)f(xn)1(x1<x2<<xn)f=1[0,1](x)
Cardinal
1
@cardinal C'est un point intéressant, mais je ne pense pas que cela soit important, bien que vous ayez raison de dire que des détails supplémentaires pourraient aider. Les swaps (en réalité des réflexions, des transformations quasi linéaires) ne sont pas aléatoires: ils sont prédéterminés. En effet, est gravé enrégions, dont l'une se distingue des autres, et il y a une bijection affine prédéterminée entre chaque région et la distinguée. D'où, le seul fait supplémentaire dont nous avons besoin est qu'une distribution uniforme sur une région est uniforme sur n'importe quel sous-ensemble mesurable de celle-ci, ce qui est une trivialité complète. In1=[0,1]n1(n1)!
whuber
2
@whuber: Remarques intéressantes. Merci d'avoir partagé! J'apprécie toujours vos pensées perspicaces sur de telles choses. En ce qui concerne mon commentaire précédent sur la "transformation linéaire aléatoire", mon argument était que, au moins via , la transformation utilisée dépend du point d'échantillonnage . Une autre façon de penser est qu'il existe une fonction fixe et prédéterminée telle quexωT:Rn1Rn1w=T(x) , mais je n'appellerais pas cette fonction linéaire, bien qu'elle soit linéaire sur les sous-ensembles qui partitionnent le cube . :)(n1)
cardinal
1
    zz <- c(0, log(-log(runif(n-1))))
    ezz <- exp(zz)
    w <- ezz/sum(ezz)

La première entrée est mise à zéro pour identification; vous verriez cela dans des modèles logistiques multinomiaux. Bien sûr, dans les modèles multinomiaux, vous auriez également des covariables sous les exposants, plutôt que simplement les zzs aléatoires . La distribution des zzs est la distribution des valeurs extrêmes; vous auriez besoin de cela pour vous assurer que les poids résultants sont iid J'ai d'abord mis rnormals là-bas, mais j'ai ensuite eu l'intuition que cela ne fonctionnera pas.

StasK
la source
Ça ne marche pas. Avez-vous essayé de regarder un histogramme?
Cardinal
4
Votre réponse est maintenant presque correcte. Si vous générez iid E x p ( 1 ) et divisez chacun par la somme, alors vous obtiendrez la distribution correcte. Voir la distribution Dirichlet pour plus de détails, bien qu'il n'en discute pas explicitement . nExp(1)
Cardinal
1
Compte tenu de la terminologie que vous utilisez, vous semblez un peu confus.
Cardinal
2
En fait, le lien Wiki ne discuter (assez) explicitement. Voir le deuxième paragraphe sous la rubrique Support .
Cardinal
1
Cette caractérisation est à la fois trop restrictive et trop générale. Elle est trop générale en ce que la distribution résultante de doit être "uniforme" sur le n - 1 simplex dans R n . Elle est trop restrictive dans la mesure où la question est formulée de manière suffisamment générale pour permettre que w soit une fonction d'une distribution n - 1 variable, qui à son tour, sans doute , mais pas nécessairement, se compose de n - 1 variables indépendantes (et peut - être iid). wn1Rnwn1n1
whuber
0

La solution est évidente. Le code MathLab suivant fournit la réponse pour 3 poids.

function [  ] = TESTGEN( )
SZ  = 1000;
V  = zeros (1, 3);
VS = zeros (SZ, 3);
for NIT=1:SZ   
   V(1) = rand (1,1);     % uniform generation on the range 0..1
   V(2) = rand (1,1) * (1 - V(1));
   V(3) = 1 - V(1) - V(2);  
   PERM = randperm (3);    % random permutation of values 1,2,3
   for NID=1:3
         VS (NIT, NID) = V (PERM(NID));
    end
end 
figure;
scatter3 (VS(:, 1), VS(:,2), VS (:,3));
end

enter image description here

user96990
la source
1
Vos marginaux n'ont pas la bonne distribution. À en juger par l'article de Wikipedia sur la distribution de Dirichlet (section de génération de nombres aléatoires, qui a l'algorithme que vous avez codé), vous devriez utiliser une distribution bêta (1,2) pour V (1), pas un uniforme [0,1] Distribution.
soakley
Il semble que la densité augmente dans les coins de ce triangle incliné. Néanmoins, il fournit un bel affichage géométrique du problème.
DWin