Numeri casuali uniformi falsi: distribuiti in modo più uniforme rispetto ai dati uniformi reali


43

Sto cercando un modo per generare numeri casuali che sembrano distribuiti in modo uniforme - e ogni test mostrerà che sono uniformi - tranne per il fatto che sono distribuiti in modo più uniforme rispetto ai dati uniformi reali .

Il problema che ho con i "veri" randoms uniformi è che occasionalmente si raggruppano. Questo effetto è più forte con una dimensione del campione bassa. Detto approssimativamente: quando disegno due randomi uniformi in U [0; 1], le probabilità sono circa del 10% di essere entro un intervallo di 0,1 e dell'1% di essere entro 0,01.

Quindi sto cercando un buon modo per generare numeri casuali distribuiti in modo più uniforme dei randoms uniformi .

Esempio di esempio: supponiamo che stia facendo un gioco per computer e che voglio posizionare il tesoro in modo casuale su una mappa (senza preoccuparmi di nulla). Non voglio che il tesoro sia tutto in un unico posto, dovrebbe essere su tutta la mappa. Con randoms uniformi, se posiziono, diciamo, 10 oggetti, le probabilità non sono così basse che ce ne siano 5 o così vicine l'una all'altra. Ciò può dare a un giocatore un vantaggio rispetto ad un altro. Pensa al dragamine, le probabilità (anche se basse, se ci sono abbastanza mine) sono che sei davvero fortunato e vinci con un solo clic.

Un approccio molto ingenuo per il mio problema è quello di dividere i dati in una griglia. Fintanto che il numero è abbastanza grande (e presenta fattori), si può imporre una maggiore uniformità in questo modo. Quindi, invece di disegnare 12 variabili casuali da U [0; 1], posso disegnare 6 da U [0; .5] e 6 da U [0,5; 1] o 4 da U [0; 1/3] + 4 da U [1/3; 2/3] + 4 da U [2/3; 1].

C'è un modo migliore per ottenere questa uniformità in più nell'uniforme? Probabilmente funziona solo per i random di gruppo (quando si disegna un singolo casuale, devo ovviamente considerare l'intero intervallo). In particolare, posso mescolare nuovamente i record in seguito (quindi non sono i primi quattro del primo terzo).

Che ne dici di farlo in modo incrementale? Quindi il primo è su U [0; 1], quindi due per ogni metà, uno per terzo, uno per quarto? Questo è stato studiato e quanto è buono? Potrei dover stare attento a usare generatori diversi per xey per non correlarli (il primo xy sarebbe sempre nella metà inferiore, il secondo nella metà sinistra e il terzo inferiore, il terzo nel terzo centrale e il terzo superiore. .. quindi è necessaria anche almeno una permutazione casuale del cestino e, nel lungo periodo, sarà troppo uniforme, immagino.

Come nodo laterale, esiste un noto test se una certa distribuzione è distribuita in modo troppo uniforme per essere veramente uniforme? Quindi testando la "divisa vera" contro "qualcuno ha incasinato i dati e distribuito gli articoli in modo più uniforme". Se ricordo bene, Hopkins Statistic può misurare questo, ma può essere utilizzato anche per i test? Anche un po 'un KS-test inverso: se la deviazione maggiore è al di sotto di una certa soglia prevista, i dati sono distribuiti in modo troppo uniforme?


7
Hai sentito parlare delle sequenze di Halton ? Per "troppo uniformemente", le persone (a partire dall'indagine di Fisher sui risultati dell'esperimento sui piselli di Mendel) hanno fatto riferimento alla (normale) statistica chi-quadrata alla coda inferiore di una distribuzione chi-quadrata.
whuber

Un modo per formalizzare ciò sarebbe quello di volere una distribuzione tale che (1) emargina a su , (2 ) è simmetrico, ovvero sono intercambiabili e (3) è grande quando sono dispersi. Penso che ci sia un vero problema con (2) e (3) poiché infinite sequenze intercambiabili in non possono essere correlate negativamente, quindi più grande vogliamo usare meno repulsione possiamo applicare; d'altra parte, per grandi , dovremmo comunque avere una buona diffusione.g ( ) 1 x 1 , . . . , X n - 1 g X 1 , . . . , X n g ( x 1 , . . . , X n ) x 1 , . . . , x n R ng(x1,...,xn)g()1x1,...,xn1gX1,...,Xng(x1,...,xn)x1,...,xnRnn
ragazzo

Le sequenze di Halton sono abbastanza vicine all'approccio a cui stavo pensando. Compreso il salto delle prime voci per ridurre il rischio di correlazione. Stavo anche pensando di usare una permutazione casuale per ogni livello. Grazie per questo puntatore, poiché questo mi dà un buon punto per cercare metodi correlati!
Anony-Mousse,

WRT. Sequenze di Halton di nuovo. Devo averli non deterministici, almeno tranne che per un seme iniziale. Vedo due modi qui. Posso fare uno spostamento ciclico di un offset casuale + un offset iniziale casuale + dimensione del passo. Il problema è che, naturalmente, il "tesoro" per rimanere nell'esempio di gioco non dovrebbe trovarsi nelle stesse posizioni l'uno rispetto all'altro ogni volta. Oppure potrei usare questo approccio uniforme dal sottointervallo che avevo nella mia domanda per aggiungere un po 'di "torsione casuale". Per così dire: Halton sembra di nuovo troppo prevedibile e regolare per il mio uso.
Anony-Mousse,

3
en.wikipedia.org/wiki/Low-discrepancy_sequence o mathworld.wolfram.com/QuasirandomSequence.html . Molti dei test comuni di RNG uniformi (come quelli nelle batterie di test Diehard / Dieharder) sono sensibili a tali cose; per esempio, ci sono troppe "piccole distanze" tra i punti.
Glen_b,

Risposte:


60

, ci sono molti modi per produrre una sequenza di numeri che sono distribuiti più uniformemente delle uniformi casuali. In effetti, esiste un intero campo dedicato a questa domanda; è la spina dorsale del quasi-Monte Carlo (QMC). Di seguito è riportato un breve tour delle basi assolute.

Uniformità di misurazione

Esistono molti modi per farlo, ma il modo più comune ha un sapore forte, intuitivo e geometrico. Supponiamo di preoccuparci di generare punti in per un numero intero positivo . Definisci dove è un rettangolo in tale che ex 1 , x 2 , , x n [ 0 , 1 ] d dnx1,x2,,xn[0,1]dd

Dn:=supRR|1ni=1n1(xiR)vol(R)|,
R[a1,b1]××[ad,bd][0,1]d0aibi1Rè l'insieme di tutti questi rettangoli. Il primo termine all'interno del modulo è la proporzione "osservata" di punti all'interno di e il secondo termine è il volume di , .RRvol(R)=i(biai)

La quantità è spesso chiamata discrepanza o discrepanza estrema dell'insieme di punti . Intuitivamente, troviamo il rettangolo "peggiore" dove la proporzione di punti si discosta di più da ciò che ci aspetteremmo in perfetta uniformità.Dn(xi)R

Questo è ingombrante nella pratica e difficile da calcolare. Per la maggior parte, le persone preferiscono lavorare con la discrepanza della stella , L'unica differenza è l'insieme su cui viene preso il supremum. È l'insieme di rettangoli ancorati (all'origine), ovvero dove .

Dn=supRA|1ni=1n1(xiR)vol(R)|.
Aa1=a2==ad=0

Lemma : per tutti , . Prova . La mano sinistra rilegato è evidente dal momento che . Il limite destro segue perché ogni può essere composta tramite unioni, intersezioni e complementi di non più di rettangoli ancorati (cioè in ).DnDn2dDnnd
ARRR2dA

Quindi, vediamo che e sono equivalenti, nel senso che se uno è piccolo man mano che cresce, anche l'altro lo sarà. Ecco un'immagine (cartone animato) che mostra i rettangoli candidati per ogni discrepanza.DnDnn

discrepanza estrema e stellare

Esempi di sequenze "buone"

Le sequenze con discrepanza stella bassa verificabile sono spesso chiamate, non sorprendentemente, sequenze a bassa discrepanza .Dn

van der Corput . Questo è forse l'esempio più semplice. Per , le sequenze di van der Corput si formano espandendo l'intero in binario e quindi "riflettendo le cifre" attorno al punto decimale. Più formalmente, questo viene fatto con la funzione radicale inversa in base , dove e sono le cifre nell'espansione di base di . Questa funzione costituisce la base anche per molte altre sequenze. Ad esempio, in binario è e cosìd=1ib

ϕb(i)=k=0akbk1,
i=k=0akbkakbi41101001a0=1 , , , , e . Quindi, il 41 ° punto nella sequenza di van der Corput è .a1=0a2=0a3=1a4=0a5=1x41=ϕ2(41)=0.100101(base 2)=37/64

Si noti che poiché il bit meno significativo di oscilla tra e , i punti per dispari sono in , mentre i punti per pari sono in .i01xii[1/2,1)xii(0,1/2)

Sequenze di Halton . Tra le più popolari delle sequenze classiche a bassa discrepanza, queste sono le estensioni della sequenza van der Corput a più dimensioni. Lascia che sia il primo più piccolo . Poi, l' esimo punto del -dimensionale sequenza di Halton è Per bassi questi funzionano abbastanza bene, ma hanno problemi di dimensioni superiori .pjjixid

xi=(ϕp1(i),ϕp2(i),,ϕpd(i)).
d

Le sequenze di Halton soddisfano . Sono anche belli perché sono estensibili in quanto la costruzione dei punti non dipende da una scelta a priori della lunghezza della sequenza .Dn=O(n1(logn)d)n

Sequenze di Hammersley . Questa è una modifica molto semplice della sequenza di Halton. Utilizziamo invece Forse sorprendentemente, il vantaggio è che hanno una migliore discrepanza della stella .

xi=(i/n,ϕp1(i),ϕp2(i),,ϕpd1(i)).
Dn=O(n1(logn)d1)

Ecco un esempio delle sequenze di Halton e Hammersley in due dimensioni.

Halton e Hammersley

Sequenze di Halton permeate da Faure . Una serie speciale di permutazioni (fissata in funzione di ) può essere applicata all'espansione delle cifre per ogni quando si produce la sequenza di Halton. Questo aiuta a rimediare (in una certa misura) ai problemi citati in dimensioni superiori. Ciascuna delle permutazioni ha l'interessante proprietà di mantenere e come punti fissi.iaki0b1

Regole reticolari . Consenti a essere numeri interi. Prendi dove indica la parte frazionaria di . La scelta oculata dei valori produce buone proprietà di uniformità. Le scelte sbagliate possono portare a cattive sequenze. Inoltre non sono estensibili. Ecco due esempi.β1,,βd1

xi=(i/n,{iβ1/n},,{iβd1/n}),
{y}yβ

Grate buone e cattive

(t,m,s) reti . reti nella base sono insiemi di punti tali che ogni rettangolo del volume in contiene punti . Questa è una forte forma di uniformità. Piccola è tua amica, in questo caso. Le sequenze di Halton, Sobol 'e Faure sono esempi di reti . Questi si prestano bene alla randomizzazione tramite rimescolamento. Scrambling casuale (fatto a destra) di una rete produce un'altra rete . Il progetto MinT conserva una raccolta di tali sequenze.(t,m,s)bbtm[0,1]sbtt(t,m,s)(t,m,s)(t,m,s)

Semplice randomizzazione: rotazioni di Cranley-Patterson . Sia una sequenza di punti. Sia . Quindi i punti sono distribuiti uniformemente in .xi[0,1]dUU(0,1)x^i={xi+U}[0,1]d

Ecco un esempio con i punti blu che sono i punti originali e i punti rossi che sono quelli ruotati con linee che li collegano (e mostrati avvolti intorno, dove appropriato).

Cranley Patterson

Sequenze distribuite in modo uniforme . Questa è una nozione ancora più forte di uniformità che a volte entra in gioco. Sia la sequenza di punti in e ora forma blocchi sovrapposti di dimensione per ottenere la sequenza . Quindi, se , prendiamo quindi , ecc. Se, per ogni , , quindi viene distribuito in modo completamente uniforme . In altre parole, la sequenza produce un insieme di punti di qualsiasi(ui)[0,1]d(xi)s=3x1=(u1,u2,u3)x2=(u2,u3,u4) s1Dn(x1,,xn)0(ui)dimensione con proprietà desiderabili .Dn

Ad esempio, la sequenza di van der Corput non è distribuita completamente in modo uniforme poiché per , i punti sono nel quadrato e i punti sono in . Quindi non ci sono punti nel quadrato che implica che per , per tutto .s=2x2i(0,1/2)×[1/2,1)x2i1[1/2,1)×(0,1/2)(0,1/2)×(0,1/2)s=2Dn1/4n

Riferimenti standard

La monografia Niederreiter (1992) e il testo di Fang and Wang (1994) sono luoghi da visitare per ulteriori esplorazioni.


4
Questa risposta è eccellente e volevo solo apprezzare lo sforzo che ci hai messo. Grazie!
Anony-Mousse,

1
Una piccola domanda di follow-up. Le sequenze di Halton sembrano buone, perché sembrano anche non troppo regolari. Il materiale reticolare è molto regolare per me, e anche la sequenza di Hammersley sembra avere molti oggetti sulle linee attraverso l'origine. Qual è un buon modo per controllare un equilibrio tra divisa vera e divisa falsa? Basta prendere l'80% di contributo da Halton + 20% uniforme casuale?
Anony-Mousse,

1
+ 10k e sicuramente con un record di risposte basse (87 !!!!)! Oh, e mi piace molto questo post. Ho aggiunto la domanda ai segnalibri per questo, in realtà. Ben fatto, @cardinal.
Macro

@Macro: grazie per un bel commento! Sei molto gentile. Penso che questa cosa da 10K possa essere temporanea per me. Sospetto che potrei scendere ben al di sotto dei 10K non appena i voti di Procrastinator verranno annullati. Sono sorpreso che questo non sia ancora successo, in realtà. Credo che abbiano lanciato quasi 3000 voti su questo sito. Grazie anche per la pubblicazione qui; in qualche modo non ho mai visto le domande di follow-up di Anony-Mousse!
cardinale il

@ Anony-Mousse: ci scusiamo per il terribile ritardo nella risposta. Devo aver trascurato questi commenti. Penso che creare un equilibrio dipenda dai tuoi obiettivi. Teoricamente parlando, l'introduzione di punti uniformi casuali è destinata , ad esempio, a distruggere le proprietà ottimali di . In pratica, potrebbe essere meglio usare un jitter molto piccolo dei punti QMC in cui il jitter è scelto in base alle proprietà della sequenza. È inoltre possibile introdurre trasformazioni casuali del corpo rigido su tutti i punti, ad esempio spostamenti e coordinate delle rotazioni. DD
cardinale il

3

Un modo per farlo sarebbe quello di generare numeri casuali uniformi, quindi verificare la "vicinanza" utilizzando qualsiasi metodo che ti piace e quindi eliminare gli oggetti casuali che sono troppo vicini agli altri e scegliere un altro set di uniformi casuali per compensarli.

Una simile distribuzione supererebbe ogni prova di uniformità? Spero proprio di no! Non è più uniformemente distribuito, ora è un'altra distribuzione.

Un aspetto uninuitivo della probabilità è che il caso è scomodo. Ci sono più corse in dati casuali di quanto la gente pensi che ci saranno. Penso che Tversky abbia fatto qualche ricerca su questo (ha fatto così tante ricerche, che è difficile da ricordare).


2
Uno dei (molti) problemi con questo approccio è che è molto difficile caratterizzare la distribuzione risultante.
whuber

L'OP sembra preoccuparsi maggiormente di campioni di piccole dimensioni. Ciò suggerirebbe che non è necessario preoccuparsi dell'intera distribuzione. Supponiamo di avere un insieme di coordinate, di generarne un altro e quindi calcolare la distanza euclidea rispetto a tutte le altre. Se la distanza minima è al di sotto della soglia, getta il numero e generane uno nuovo. Penso che la soluzione di Peter funzioni bene.
Giovanni,

@whuber Non sembra esserne interessato, anche se potrei sbagliarmi.
Peter Flom - Ripristina Monica

2
Consentitemi di esprimere un po 'più chiaramente la mia obiezione, Peter: quando rimuovete e / o regolate i valori pseudocasuali in modo ad hoc per approssimare alcune proprietà desiderate, come la mancanza di clustering, è difficile assicurare che le sequenze risultanti abbiano eventuali proprietà desiderabili. Con il tuo metodo, ad esempio, potresti persino dirci quale sarebbe il primo momento del processo risultante? (Cioè, puoi persino assicurarci che l'intensità sia uniforme?) Che dire del secondo momento? Di solito si tratta delle informazioni minime necessarie per utilizzare le sequenze in modo efficace per l'inferenza.
whuber

2
OK, ma, nell'esempio nella domanda, vuole mettere un tesoro su una mappa in un gioco. Ciò non implica inferenze, momenti o qualcosa del genere. Ammetto che il mio metodo non sarebbe buono per molti scopi, ma penso che corrisponda all'esempio. Certo, forse l'esempio non è proprio quello che vuole ... Forse vuole qualcosa di più formale, nel qual caso tutte le altre risposte dovrebbero essere esaminate.
Peter Flom - Ripristina Monica

3

Questo è noto come un processo di poisson "hard-core" - così chiamato da Brian Ripley negli anni '70; cioè vuoi che sia casuale, ma non vuoi che i punti siano troppo vicini tra loro. L '"hard-core" può essere immaginato come una zona cuscinetto attorno alla quale altri punti non possono intromettersi.

Immagina di registrare la posizione di alcune auto in una città, ma stai registrando solo il punto nel centro nominale dell'auto. Mentre sono in strada, nessuna coppia di due punti può avvicinarsi perché i punti sono protetti dal "nocciolo duro" della carrozzeria - ignoreremo la potenziale super-posizione nei parcheggi multipiano :-)

Esistono procedure per generare tali processi di punti: un modo è semplicemente quello di generare punti in modo uniforme e quindi rimuovere quelli troppo vicini tra loro!

Per alcuni dettagli su tali processi, fare riferimento ad esempio a questo


2

Per quanto riguarda la generazione in batch in anticipo, genererei un gran numero di set di variate pseudocasuali e quindi li testerei con un test come il test di Kolmogorov-Smirnov. Dovrai selezionare il set con il valore p più alto (ovvero è l'ideale). Nota che questo sarà lento, ma man mano che diventa più grande probabilmente diventa meno necessario. p1N

Per quanto riguarda la generazione incrementale, essenzialmente stai cercando una serie con un'autocorrelazione moderatamente negativa. Non sono sicuro di quale sarebbe il modo migliore per farlo, dato che ho un'esperienza molto limitata con le serie storiche, ma sospetto che esistano algoritmi esistenti per questo.

Per quanto riguarda un test per "troppo uniforme", qualsiasi test per stabilire se un campione segue una distribuzione specifica (come il KS annotato sopra) lo farà, vuoi solo verificare se , piuttosto che il approccio standard. Ho scritto qui un esempio di questo approccio alternativo: il chi-quadrato è sempre un test unilaterale . p>(1α)


1

Vorrei formalizzare il tuo problema in questo modo: vuoi una distribuzione su tale che la densità sia per alcuni quantificando la repulsione dei punti.[0,1]nf(x)e(1kij|xixj|k)1kk<0

Un modo semplice per generare tali vettori è eseguire il campionamento di Gibbs.


Puoi approfondire questo? Il campionamento di Gibbs non sembra aiutare qui, poiché distribuzione condizionale = distribuzione marginale = uniforme? O è il tuo suggerimento di utilizzare i campioni precedenti per produrre "buchi" nella distribuzione da cui prelevare campioni?
Anony-Mousse,

Scegli un vettore casuale uniforme, quindi scegli ripetutamente un indice e ricampiona . Calcola il rapporto di prima e dopo il ricampionamento e rifiuta il ricampionamento con le probabilità . Questo è molto più veloce delle altre risposte che hai ottenuto quando hai un vettore molto lungo perché stai eseguendo rifiuti locali anziché globali. ixirf(x)r
Neil G,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.