Fałszywe jednolite liczby losowe: bardziej równomiernie rozłożone niż prawdziwe jednolite dane

43

Szukam sposobu generowania liczb losowych, które wydają się być jednolicie rozmieszczone - a każdy test wykaże, że są one jednolite - z tym wyjątkiem, że są one bardziej równomiernie rozłożone niż prawdziwe jednolite dane .

Problem, jaki mam z „prawdziwymi” losowymi mundurami, polega na tym, że czasami się grupują. Efekt ten jest silniejszy przy małej wielkości próbki. Z grubsza powiedziane: kiedy narysuję dwa losowe Mundury w U [0; 1], szanse wynoszą około 10%, że są w zakresie 0,1, a 1%, że są w zakresie 0,01.

Więc szukam dobrego sposobu na generowanie liczb losowych, które są bardziej równomiernie rozłożone niż jednolite losowe .

Przykład użycia: powiedzmy, że gram w grę komputerową i chcę losowo umieszczać skarb na mapie (nie dbając o nic innego). Nie chcę, aby skarb znajdował się w jednym miejscu, powinien znajdować się na całej mapie. W przypadku losowych mundurów, jeśli umieszczę, powiedzmy, 10 obiektów, szanse nie są tak małe, że 5 lub tak naprawdę są blisko siebie. To może dać jednemu graczowi przewagę nad drugim. Pomyśl o trałowcu, szanse (choć niskie, jeśli jest wystarczająco dużo min) są takie, że masz szczęście i wygrywasz jednym kliknięciem.

Bardzo naiwnym podejściem do mojego problemu jest podzielenie danych na siatkę. Dopóki liczba jest wystarczająco duża (i zawiera czynniki), można w ten sposób wymusić dodatkową jednolitość. Zamiast więc rysować 12 zmiennych losowych z U [0; 1], mogę narysować 6 z U [0; .5] i 6 z U [0,5; 1] lub 4 z U [0; 1/3] + 4 od U [1/3; 2/3] + 4 od U [2/3; 1].

Czy istnieje lepszy sposób, aby wprowadzić tę dodatkową równość do munduru? Prawdopodobnie działa tylko dla losowych partii (podczas losowania pojedynczego losu, oczywiście muszę wziąć pod uwagę cały zakres). W szczególności mogę później przetasować nagrania (więc nie są to pierwsze cztery z pierwszego trzeciego).

Co powiesz na robienie tego stopniowo? Więc pierwsza jest na U [0; 1], a następnie dwie z każdej połowy, jedna z każdej trzeciej, jedna z każdej czwartej? Czy zostało to zbadane i jak dobre jest? Być może będę musiał ostrożnie używać różnych generatorów dla xiy, aby nie skorelować ich (pierwszy xy zawsze będzie w dolnej połowie, drugi w lewej połowie i dolnej trzeciej, trzeci w środkowej trzeciej i górnej trzeciej. .. więc potrzebna jest co najmniej losowa permutacja bin. W dłuższej perspektywie będzie ona zbyt wyrównana, tak myślę.

Jako węzeł boczny, czy istnieje dobrze znany test, czy niektóre rozkłady są zbyt równomiernie rozłożone, aby były naprawdę jednolite? Testowanie „prawdziwego munduru” vs. „ktoś pomieszał dane i rozłożył elementy bardziej równomiernie”. Jeśli dobrze pamiętam, statystyki Hopkinsa mogą to zmierzyć, ale czy można to również wykorzystać do testowania? Również nieco odwrotny test KS: jeśli największe odchylenie jest poniżej określonego oczekiwanego progu, dane są zbyt równomiernie rozłożone?

Anony-Mus
źródło
7
Czy słyszałeś o sekwencjach Haltona ? W przypadku „zbyt równomiernie” ludzie (poczynając od badania Fishera wyników eksperymentu Mendla z grochem) odnieśli się do (zwykłej) statystyki chi-kwadrat do dolnego ogona rozkładu chi-kwadrat.
whuber
Jednym ze sposobów sformalizowania tego byłoby utworzenie rozkładu takiego, że (1) marginalizowany do stosunku do , (2 ) jest symetryczne, tzn. są wymienne, a (3) jest duże, gdy są rozproszone. Myślę, że istnieje prawdziwy problem z (2) i (3), ponieważ nieskończone wymienne sekwencje w nie mogą być ujemnie skorelowane, więc im większe chcemy użyć, tym mniej odpychania możemy wymusić; z drugiej strony, dla dużego powinniśmy mieć dobry rozkład.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
facet
Sekwencje Halton są bardzo zbliżone do podejścia, o którym myślałem. W tym pomijanie pierwszych kilku pozycji w celu zmniejszenia ryzyka korelacji. Myślałem również o zastosowaniu losowej permuacji dla każdego poziomu. Dziękuję za ten wskaźnik, ponieważ daje mi to dobry punkt do wyszukiwania powiązanych metod!
Anony-Mousse
wrt. Znów sekwencje Halton. Muszę mieć je niedeterministyczne, przynajmniej z wyjątkiem początkowego ziarna. Widzę tutaj dwa sposoby. Mogę wykonać cykliczne przesunięcie o losowe przesunięcie + losowe przesunięcie początkowe + wielkość kroku. Problem polega na tym, że „skarb” pozostający na przykładzie gry nie powinien znajdować się za każdym razem w tych samych pozycjach. Albo mógłbym użyć tego podejścia równomiernie od podinterwału, które miałem w swoim pytaniu, aby dodać trochę „losowego zwrotu”. Tak więc powiedzieć: Halton wydaje się znów zbyt przewidywalny i regularny na mój użytek.
Anony-Mousse
3
en.wikipedia.org/wiki/Low-discrepancy_sequence lub mathworld.wolfram.com/QuasirandomSequence.html . Kilka typowych testów jednolitych RNG (takich jak te w bateriach testów Diehard / Dieharder) jest wrażliwych na takie rzeczy; na przykład jest zbyt mało „małych odległości” między punktami.
Glen_b

Odpowiedzi:

60

Tak , istnieje wiele sposobów tworzenia sekwencji liczb, które są bardziej równomiernie rozłożone niż losowe mundury. W rzeczywistości istnieje całe pole poświęcone temu pytaniu; jest to kręgosłup quasi-Monte Carlo (QMC). Poniżej znajduje się krótka prezentacja absolutnych podstaw.

Pomiar jednorodności

Można to zrobić na wiele sposobów, ale najczęstszy sposób ma silny, intuicyjny, geometryczny smak. Załóżmy, że zajmujemy się generowaniem punktów x 1 , x 2 , , x n w [ 0 , 1 ] d dla pewnej dodatniej liczby całkowitej d . Zdefiniuj gdzie jest prostokątem w takim, żenx1,x2,,xn[0,1]ddR [ a 1 , b 1 ] × × [ a d , b d ]

Dn:=supRR|1ni=1n1(xiR)vol(R)|,
R[a1,b1]××[ad,bd] 0 a ib i1 R R R v o l ( R ) = i ( b i - I )[0,1]d0aibi1 a jest zbiorem wszystkich takich prostokątów. Pierwszy element w module to „obserwowana” proporcja punktów wewnątrz a drugi to objętość , .RRRvol(R)=i(biai)

Wielkość jest często nazywana rozbieżnością lub skrajną rozbieżnością zbioru punktów . Intuicyjnie znajdujemy „najgorszy” prostokąt którym proporcja punktów najbardziej odbiega od tego, czego moglibyśmy oczekiwać przy idealnej jednolitości. ( x i ) RDn(xi)R

Jest to niewygodne w praktyce i trudne do obliczenia. W przeważającej części ludzie wolą pracować z rozbieżnością między , Jedyną różnicą jest zbiór nad którym przejęte jest supremum. Jest to zestaw zakotwiczonych prostokątów (na początku), tj. Gdzie .A a 1 = a 2 = = a d = 0

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

Lemat : dla wszystkich , . Dowód . Lewa ręka związany jest oczywiste ponieważ . Prawa granica jest następująca, ponieważ każdy może być skomponowany przez połączenia, przecięcia i uzupełnienia nie więcej niż zakotwiczonych prostokątów (tj. ). n d AR R R 2 d ADnDn2dDnnd
ARRR2dA

Widzimy zatem, że i są równoważne w tym sensie, że jeśli jedno jest małe, gdy rośnie, drugie też będzie. Oto (kreskówkowy) obraz przedstawiający kandydujące prostokąty dla każdej rozbieżności.D n nDnDnn

rozbieżność ekstremalna i gwiazdowa

Przykłady „dobrych” sekwencji

Sekwencje o weryfikowalnie niskiej rozbieżności między są często nazywane, co nie jest zaskakujące, sekwencjami o niskiej rozbieżności .Dn

van der Corput . To chyba najprostszy przykład. Dla sekwencje van der Corputa są tworzone przez rozszerzenie liczby całkowitej binarnie, a następnie „odzwierciedlenie cyfr” wokół kropki dziesiętnej. Bardziej formalnie, robi się to za pomocą radykalnej funkcji odwrotnej w bazie , gdzie i są cyframi w rozszerzeniu podstawy . Ta funkcja stanowi również podstawę wielu innych sekwencji. Na przykład w systemie binarnym to i tak daleji b ϕ b ( i ) = k = 0 a k b - k - 1d=1ibi = k = 0 a k b k a k b i 41 101001 a 0 = 1

ϕb(i)=k=0akbk1,
i=k=0akbkakbi41101001a0=1 , , , , i . Dlatego 41. punkt w sekwencji van der Corputa to .a 2 = 0 a 3 = 1 a 4 = 0 a 5 = 1 x 41 = ϕ 2 ( 41 ) = 0,100101a1=0a2=0a3=1a4=0a5=1x41=ϕ2(41)=0.100101(base 2)=37/64

Zauważ, że ponieważ najmniej znaczący bit oscyluje między a , punkty dla nieparzystego są w , podczas gdy punkty dla parzystego są w .i1 x I I [ 1 / 2 , 1 ) x I I ( 0 , 1 / 2 )01xjaja[1/2),1)xjaja(0,1/2))

Sekwencje Haltona . Wśród najbardziej popularnych klasycznych sekwencji o niskiej rozbieżności są to rozszerzenia sekwencji van der Corputa na wiele wymiarów. Niech będzie tą najmniejszą liczbą pierwszą. Następnie tego punktu z -wymiarowej sekwencji Halton jest Dla niskiej działają one całkiem dobrze, ale mają problemy z wyższymi wymiarami . jpjotjotx i d x i = ( ϕ p 1 ( i ) , ϕ p 2 ( i ) , , ϕ p d ( i ) )jaxjarere

xja=(ϕp1(ja),ϕp2)(ja),,ϕpre(ja)).
re

Sekwencje Halton spełniają . Są również ładne, ponieważ można je rozszerzać , ponieważ konstrukcja punktów nie zależy od a priori wyboru długości sekwencji .nren=O(n-1(logn)re)n

Sekwencje Hammersleya . Jest to bardzo prosta modyfikacja sekwencji Halton. Zamiast tego używamy Być może zaskakujące jest to, że mają lepszą rozbieżność między .D n = O ( n - 1 ( log n ) d - 1 )

xja=(ja/n,ϕp1(ja),ϕp2)(ja),,ϕpre-1(ja)).
ren=O(n-1(logn)re-1)

Oto przykład sekwencji Halton i Hammersley w dwóch wymiarach.

Halton and Hammersley

Faure permutowane sekwencje Halton . Specjalny zestaw permutacji (ustalony jako funkcja ) może być zastosowany do rozszerzenia cyfr dla każdego podczas tworzenia sekwencji Halton. Pomaga to zaradzić (do pewnego stopnia) problemom wskazanym w wyższych wymiarach. Każda z permutacji ma interesującą właściwość utrzymywania i jako punktów stałych.jazakja0b-1

Kraty rządzą . Niech będą liczbami całkowitymi. Weź gdzie oznacza ułamkową część . Rozsądny wybór wartości daje dobre właściwości jednorodności. Złe wybory mogą prowadzić do złych sekwencji. Nie można ich również rozszerzać. Oto dwa przykłady.β1,,βre-1

xja=(ja/n,{jaβ1/n},,{jaβre-1/n}),
{y}yβ

Dobre i złe kraty

(t,m,s) siatki . sieci w bazie są zestawami punktów, tak że każdy prostokąt objętości w zawiera punktów. To silna forma jednolitości. W tym przypadku mały jest twoim przyjacielem. Sekwencje Halton, Sobol 'i Faure są przykładami sieci . Ładnie nadają się do randomizacji poprzez szyfrowanie. Losowe mieszanie (zrobione z prawej) sieci daje inną sieć. Projekt MinT przechowuje zbiór takich sekwencji.(t,m,s)bbt-m[0,1]sbtt(t,m,s)(t,m,s)(t,m,s)

Prosta randomizacja: rotacje Cranleya-Pattersona . Niech będzie ciągiem punktów. Niech . Następnie punkty są równomiernie rozmieszczone w .xja[0,1]reUU(0,1)x^ja={xja+U}[0,1]re

Oto przykład z niebieskimi kropkami będącymi oryginalnymi punktami, a czerwonymi kropkami będącymi obróconymi z liniami łączącymi je (i pokazanymi, gdzie to właściwe, owiniętymi wokół).

Cranley Patterson

Sekwencje całkowicie równomiernie rozmieszczone . Jest to jeszcze silniejsze pojęcie jednolitości, które czasem wchodzi w grę. Niech będzie sekwencją punktów w i teraz utworzy nakładające się bloki wielkości aby uzyskać sekwencję . Więc jeśli , bierzemy a następnie itd. Jeśli, dla każdego , , wtedy mówi się, że jest całkowicie równomiernie rozłożony . Innymi słowy, sekwencja daje zestaw dowolnych punktów(uja)[0,1]re(xja)s=3)x1=(u1,u2),u3))x2)=(u2),u3),u4) s1ren(x1,,xn)0(uja)wymiar, który ma pożądane .ren

Na przykład sekwencja van der Corputa nie jest całkowicie równomiernie rozłożona, ponieważ dla punkty znajdują się w kwadracie a punkty są w . Stąd nie ma punktów w kwadracie co oznacza, że ​​dla , dla wszystkich .x 2 I ( 0 , 1 / 2 ) x [ 1 / 2 , 1 ) x 2 I - 1 [ 1 / 2 , 1 ) x n1 / 4 ns=2)x2)ja(0,1/2))×[1/2),1)x2)ja-1[1/2),1)×(0,1/2))(0,1/2))×(0,1/2))s=2)ren1/4n

Standardowe referencje

Niederreiter (1992) monografia i Fang i Wang (1994) tekst są miejsca, aby przejść do dalszej eksploracji.

kardynał
źródło
4
Ta odpowiedź jest doskonała i chciałem po prostu docenić wysiłek włożony w to. Dziękuję Ci!
Anony-Mousse
1
Jedno małe pytanie uzupełniające. Sekwencje Haltona wyglądają dobrze, ponieważ wydają się również nie być zbyt regularne. Kraty są dla mnie bardzo regularne, a także sekwencja Hammersleya wydaje się mieć wiele obiektów na liniach przechodzących przez początek. Jaki jest dobry sposób na kontrolowanie równowagi między prawdziwym mundurem a fałszywym mundurem? Po prostu weź 80% wkładu z Halton + 20% jednolity losowo?
Anony-Mousse
1
+ 10k i zdecydowanie z rekordowo niskimi (87 !!!!) odpowiedziami! Och, i bardzo podoba mi się ten post. Właśnie z tego powodu dodałem do zakładek pytanie. Dobra robota, @cardinal.
Makro
@Macro: Dziękuję za tak miły komentarz! Jesteś bardzo miły. Myślę, że ta 10K może być dla mnie tymczasowa. Podejrzewam, że mogę spaść znacznie poniżej 10 000, gdy tylko głosy Procrastinatora zostaną cofnięte. Dziwi mnie, że tak się jeszcze nie stało. Uważam, że oddali prawie 3000 głosów na tej stronie. Dziękujemy również za opublikowanie tutaj; jakoś nigdy nie widziałem dalszych pytań Anony-Mousse!
kardynał
@ Anony-Mousse: Przepraszamy za straszne opóźnienia w udzielaniu odpowiedzi. Musiałem przeoczyć te komentarze. Myślę, że stworzenie równowagi zależy od twoich celów. Teoretycznie wprowadzenie dowolnych losowych jednorodnych punktów musi na przykład zniszczyć optymalne właściwości . W praktyce lepiej może być zastosowanie bardzo małego jittera punktów QMC, gdzie jitter jest wybierany na podstawie właściwości sekwencji. Można również wprowadzić losowe transformacje ciała sztywnego we wszystkich punktach, np. Przesunięcia i obroty współrzędnych. D rere
kardynał
3

Jednym ze sposobów jest wygenerowanie jednolitych liczb losowych, a następnie przetestowanie „bliskości” za pomocą dowolnej metody, a następnie usunięcie losowych przedmiotów, które są zbyt blisko innych i wybranie innego zestawu losowych mundurów, aby je nadrobić.

Czy taki rozkład zda każdy test jednorodności? Mam nadzieję, że nie! Nie jest już równomiernie rozprowadzany, jest teraz inną dystrybucją.

Jednym z nieużytecznych aspektów prawdopodobieństwa jest to, że szansa jest zbita. Dane losowe zawierają więcej przebiegów, niż ludzie sądzą. Myślę, że Tversky przeprowadził kilka badań na ten temat (tyle jednak zbadał, że trudno to zapamiętać).

Peter Flom - Przywróć Monikę
źródło
2
Jednym z (wielu) problemów związanych z tym podejściem jest bardzo trudno scharakteryzować wynikowy rozkład.
whuber
OP wydaje się najbardziej zaniepokojony małymi rozmiarami próby. Sugerowałoby to, że nie musi się przejmować całą dystrybucją. Załóżmy, że masz zestaw współrzędnych, generujesz inną, a następnie obliczasz odległość euklidesową w odniesieniu do wszystkich pozostałych. Jeśli najmniejsza odległość jest poniżej pewnego progu, wyrzuć liczbę i wygeneruj nową. Myślę, że rozwiązanie Petera działa dobrze.
Jan
@ whuber Nie wydaje się tym zainteresowany, chociaż mogę się mylić.
Peter Flom - Przywróć Monikę
2
Pozwólcie, że wyrażę mój sprzeciw nieco jaśniej, Peter: kiedy usuwasz i / lub dostosowujesz wartości pseudolosowe w sposób ad hoc w celu przybliżenia niektórych pożądanych właściwości, takich jak brak grupowania, trudno jest zapewnić, że powstałe sekwencje mają wszelkie pożądane właściwości. Czy na przykład swoją metodą mógłbyś nam powiedzieć, jaki byłby pierwszy moment wynikowego procesu? (Czy w ogóle możesz nas zapewnić, że intensywność jest jednolita?) A co z drugą chwilą? Zwykle stanowią one minimum informacji potrzebnych do skutecznego wykorzystania sekwencji do wnioskowania.
whuber
2
OK, ale w przykładzie w pytaniu chce umieścić skarb na mapie w grze. To nie będzie wymagało wnioskowania, chwil ani niczego w tym rodzaju. Przyznaję, że moja metoda nie byłaby dobra do wielu celów, ale myślę, że pasuje do przykładu. Oczywiście, może ten przykład nie jest tym, czego on chce ... Może chce czegoś bardziej formalnego, w takim przypadku należy przejrzeć wszystkie pozostałe odpowiedzi.
Peter Flom - Przywróć Monikę
3

Proces ten nazywany jest „twardym” procesem punktu Poissona - tak nazwany przez Briana Ripleya w latach siedemdziesiątych; tzn. chcesz, aby był losowy, ale nie chcesz, aby punkty były zbyt blisko siebie. „Twardy rdzeń” można wyobrazić jako strefę buforową, wokół której inne punkty nie mogą się wtrącać.

Wyobraź sobie, że rejestrujesz pozycję niektórych samochodów w mieście - ale rejestrujesz tylko punkt w nominalnym środku samochodu. Podczas gdy są na ulicach, dwie pary punktów nie mogą się do siebie zbliżyć, ponieważ punkty są chronione przez „twardy rdzeń” nadwozia - zignorujemy potencjalną super pozycję na parkingach wielopoziomowych :-)

Istnieją procedury generowania takich procesów punktowych - jednym ze sposobów jest po prostu generowanie punktów równomiernie, a następnie usuwanie tych, które są zbyt blisko siebie!

Aby uzyskać szczegółowe informacje na temat takich procesów, patrz na przykład to

Sean
źródło
2

W odniesieniu do generowania partii z góry wygenerowałbym dużą liczbę zestawów zmiennych pseudolosowych, a następnie przetestowałem je za pomocą testu takiego jak test Kołmogorowa-Smirnowa. Będziesz chciał wybrać zestaw, który ma najwyższą wartość p (tj. jest idealny). Zauważ, że będzie to powolne, ale wraz ze wzrostem prawdopodobnie stanie się mniej konieczne. Np1N.

Jeśli chodzi o generowanie przyrostowe, zasadniczo szukasz serii z umiarkowanie ujemną autokorelacją. Nie jestem pewien, jaki byłby najlepszy sposób, ponieważ mam bardzo ograniczone doświadczenie z szeregami czasowymi, ale podejrzewam, że istnieją na to algorytmy.

W odniesieniu do testu na „zbyt parzysty”, każdy test na to, czy próbka ma określony rozkład (taki jak wspomniany powyżej KS) zrobi, wystarczy sprawdzić, czy , a nie standardowe podejście. Pisałem tutaj o przykładzie tego alternatywnego podejścia: chi-kwadrat zawsze jest testem jednostronnym . p>(1-α)

gung - Przywróć Monikę
źródło
1

Sformalizowałbym twój problem w ten sposób: Chcesz rozkład na taki, że gęstość wynosi dla niektórych określających odpychanie punktów. f ( x ) e ( 1[0,1]n k<0fa(x)mi(1kjajot|xja-xjot|k)1kk<0

Jednym łatwym sposobem na wygenerowanie takich wektorów jest wykonanie próbkowania Gibbsa.

Neil G.
źródło
Czy możesz to rozwinąć? Próbkowanie Gibbsa nie wydaje się tutaj pomocne, ponieważ rozkład warunkowy = rozkład marginalny = jednolity? Czy może sugerujesz wykorzystanie poprzednich próbek do utworzenia „dziur” w rozkładzie, z którego pobierana jest próbka?
Anony-Mousse
jaxjarfa(x)r