Поддельные равномерные случайные числа: более равномерно распределены, чем истинные однородные данные


43

Я ищу способ генерирования случайных чисел, которые кажутся равномерно распределенными - и каждый тест покажет, что они равномерно распределены - за исключением того, что они распределены более равномерно, чем истинные однородные данные .

Проблема, с которой я сталкиваюсь с «настоящими» униформами, состоит в том, что они иногда будут группироваться. Этот эффект сильнее при небольшом размере выборки. Грубо говоря: когда я рисую два единообразных рандома в U [0; 1], вероятность составляет около 10%, что они находятся в диапазоне от 0,1, и 1%, что они находятся в пределах 0,01.

Поэтому я ищу хороший способ генерировать случайные числа, которые распределены более равномерно, чем равномерные случайные числа .

Пример использования: скажем, я играю в компьютерную игру и хочу произвольно разместить сокровища на карте (не заботясь ни о чем другом). Я не хочу, чтобы сокровища были в одном месте, они должны быть по всей карте. При равномерном случайном расположении, если я размещу, скажем, 10 объектов, шансы не настолько низкие, что 5 или около того действительно близко друг к другу. Это может дать одному игроку преимущество перед другим. Подумайте о тральщике, но есть вероятность (пусть и небольшая, если мин достаточно), что вам действительно повезло, и вы выиграли одним кликом.

Очень наивный подход к моей проблеме - разделить данные на сетку. Пока число достаточно велико (и имеет факторы), таким образом можно обеспечить дополнительную однородность. Таким образом, вместо рисования 12 случайных величин из U [0; 1], я могу извлечь 6 из U [0; .5] и 6 из U [0.5; 1] или 4 из U [0; 1/3] + 4 из U [1/3; 2/3] + 4 из U [2/3; 1].

Есть ли какой-нибудь лучший способ придать этой дополнительной ровности форму? Вероятно, это работает только для пакетных случайностей (когда я рисую одну случайную единицу, я, очевидно, должен учитывать весь диапазон). В частности, я могу снова перемешать записи (так что это не первые четыре из первой трети).

Как насчет того, чтобы делать это постепенно? Итак, первое находится на U [0; 1], затем по две от каждой половины, по одной от каждой третьей, по одной от каждой четвертой? Было ли это исследовано, и насколько это хорошо? Возможно, мне придется быть осторожным, чтобы использовать разные генераторы для x и y, чтобы не получить их корреляцию (первый xy всегда будет в нижней половине, второй в левой половине и нижней трети, третий в центральной трети и верхней трети. .. так что по крайней мере некоторая случайная перестановка мусора также необходима. и в конечном счете, это будет слишком даже, я думаю.

Как побочный узел, существует ли хорошо известный тест, является ли некоторое распределение слишком равномерным, чтобы быть действительно равномерным? Таким образом, тестирование «истинная униформа» против «кто-то испортил данные и распределял предметы более равномерно». Если я правильно помню, Hopkins Statistic может измерить это, но можно ли его использовать и для тестирования? Также несколько обратный тест KS: если наибольшее отклонение ниже определенного ожидаемого порога, данные распределены слишком равномерно?


7
Вы слышали о последовательностях Хэлтона ? Для «слишком равномерно» люди (начиная с исследования Фишером результатов эксперимента с горохом Менделя) ссылались на (обычную) статистику хи-квадрат к нижнему хвосту распределения хи-квадрат.
whuber

Один из способов формализовать это состоит в том, чтобы хотеть распределение , чтобы (1) маргинализировался до по , (2 ) симметрична, то есть являются взаимозаменяемыми, и (3) велико, когда рассеяны. Я думаю, что есть реальная проблема с (2) и (3), так как бесконечные взаимозаменяемые последовательности в не могут быть отрицательно коррелированы, поэтому чем больше мы хотим использовать, тем меньше отталкивания мы можем применить; с другой стороны, для больших у нас должен быть хороший спред в любом случае.г ( ) 1 х 1 , . , , , Х п - 1 г Х 1 , . , , , Х п г ( х 1 , . . . , Х п ) х 1 , . , , , х н р нg(x1,...,xn)g()1x1,...,xn1gX1,...,Xng(x1,...,xn)x1,...,xnRnn
парень

Последовательности Хэлтона довольно близки к подходу, о котором я думал. В том числе пропуская первые несколько записей, чтобы уменьшить риск корреляции. Я также думал об использовании случайной перестановки для каждого уровня. Спасибо за этот указатель, так как это дает мне хорошую точку для поиска связанных методов!
Anony-Mousse

WRT. Снова Хэлтон. Мне нужно, чтобы они были недетерминированными, по крайней мере, за исключением начального семени. Я вижу два пути здесь. Я могу сделать циклический сдвиг на случайное смещение + случайное смещение начала + размер шага. Проблема в том, что, конечно, «сокровище», оставшееся в примере с игрой, также не должно каждый раз находиться в одинаковых позициях относительно друг друга. Или я мог бы использовать этот подход с единым интервалом, который у меня был в моем вопросе, чтобы добавить некоторое количество «случайного поворота». Скажем так: Халтон кажется мне слишком предсказуемым и регулярным для моего использования.
Anony-Mousse

3
en.wikipedia.org/wiki/Low-discrepancy_sequence или mathworld.wolfram.com/QuasirandomSequence.html . Некоторые из общих испытаний однородных ГСЧ (например, тесты батарей Diehard / Dieharder) чувствительны к таким вещам; например, слишком мало «небольших расстояний» между точками.
Glen_b

Ответы:


60

Да , есть много способов создать последовательность чисел, которые распределены более равномерно, чем случайные формы. На самом деле есть целая область, посвященная этому вопросу; это основа квази-Монте-Карло (QMC). Ниже краткий обзор основ.

Измерение однородности

Есть много способов сделать это, но самый распространенный способ имеет сильный, интуитивный, геометрический вкус. Предположим, что мы имеем дело с генерацией точек в для некоторого натурального числа . Определить где - прямоугольник в такой, что иx 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это множество всех таких прямоугольников. Первый член в модуле - это «наблюдаемая» пропорция точек внутри а второй член - это объем , .RRvol(R)=i(biai)

Величину часто называют расхождением или крайним расхождением множества точек . Интуитивно понятно, что мы находим «худший» прямоугольник котором доля точек больше всего отличается от того, что мы ожидаем при идеальной однородности.Dn(xi)R

Это громоздко на практике и сложно вычислить. По большей части люди предпочитают работать с расхождением звезд : Единственным отличием является набор над которым взят супремум. Это набор закрепленных прямоугольников (в начале координат), т. Где .

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

Лемма : для всех , . Доказательство . Левая рука связана очевидна , так как . Правая оценка следует из того, что каждый может быть составлен через объединения, пересечения и дополнения не более чем закрепленных прямоугольников (т. ).DnDn2dDnnd
ARRR2dA

Таким образом, мы видим, что и эквивалентны в том смысле, что если один мал с ростом , другой тоже будет. Вот (мультфильм) картина, показывающая прямоугольники-кандидаты для каждого несоответствия.DnDnn

экстремальное и звездное расхождение

Примеры «хороших» последовательностей

Последовательности с достоверно низким расхождением звезд часто называют последовательностями с низким расхождением .Dn

ван дер Корпут . Это, пожалуй, самый простой пример. Для последовательности Ван-дер-Корпута формируются путем расширения целого числа в двоичном виде и последующего «отражения цифр» вокруг десятичной точки. Более формально это делается с помощью радикальной обратной функции в базе , где и - цифры в расширении базы для . Эта функция является основой для многих других последовательностей. Например, в двоичном виде это и такd=1ib

ϕb(i)=k=0akbk1,
i=k=0akbkakbi41101001a0=1 , , , , и . Следовательно, 41- точка в последовательности Ван дер Корпута имеет вид .a1=0a2=0a3=1a4=0a5=1x41=ϕ2(41)=0.100101(base 2)=37/64

Обратите внимание, что, поскольку младший значащий бит колеблется между и , точки для нечетного находятся в , тогда как точки для четного находятся в .i01xii[1/2,1)xii(0,1/2)

Последовательности Хэлтона . Среди наиболее популярных классических последовательностей с низким расхождением это расширения последовательности Ван-дер-Корпута для нескольких измерений. Пусть будет м наименьшим простым числом. Затем й точки в - мерной последовательности Хэлтон является Для низких они работают довольно хорошо, но имеют проблемы в более высоких измерениях .pjjixid

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

Последовательности удовлетворяют . Они также хороши тем, что они расширяемы тем, что построение точек не зависит от априорного выбора длины последовательности .Dn=O(n1(logn)d)n

Последовательности Хэммерсли . Это очень простая модификация последовательности Халтона. Вместо этого мы используем Возможно, удивительно, преимущество в том, что они имеют лучшее расхождение звезд: .

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

Вот пример последовательностей Халтона и Хаммерсли в двух измерениях.

Хэлтон и Хаммерсли

Перманутные перестановки Халтона . Специальный набор перестановок (фиксированный как функция ) может быть применен к разложению цифр для каждого при создании последовательности Halton. Это помогает исправить (до некоторой степени) проблемы, на которые ссылаются в более высоких измерениях. Каждая из перестановок обладает интересным свойством сохранения и качестве фиксированных точек.iaki0b1

Правила решетки . Пусть будут целыми числами. Возьмем где обозначает дробную часть . Разумный выбор значений дает хорошие свойства однородности. Плохой выбор может привести к плохим последствиям. Они также не являются расширяемыми. Вот два примера.β1,,βd1

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

Хорошие и плохие решетки

(t,m,s) сетки . сети в базе - это наборы точек, в которых каждый прямоугольник объема в содержит точек. Это сильная форма единообразия. Маленький твой друг, в этом случае. Последовательности Halton, Sobol 'и Faure являются примерами сетей. Они прекрасно поддаются рандомизации с помощью скремблирования. Случайное скремблирование (сделано правильно) сети приводит к другой сети . Проект MinT хранит коллекцию таких последовательностей.(t,m,s)bbtm[0,1]sbtt(t,m,s)(t,m,s)(t,m,s)

Простая рандомизация: вращения Крэнли-Паттерсона . Пусть - последовательность точек. Пусть . Тогда точки равномерно распределены в .xi[0,1]dUU(0,1)x^i={xi+U}[0,1]d

Вот пример с синими точками, являющимися исходными точками, и красными точками, являющимися повернутыми с линиями, соединяющими их (и показаны обернутыми, где это уместно).

Крэнли Паттерсон

Полностью равномерно распределенные последовательности . Это еще более сильное понятие единообразия, которое иногда вступает в игру. Пусть - последовательность точек в и теперь формируем перекрывающиеся блоки размера чтобы получить последовательность . Итак, если , мы берем затем и т. Д. Если для каждого , , то называется равномерно распределенным . Другими словами, последовательность дает набор точек любого(ui)[0,1]d(xi)s=3x1=(u1,u2,u3)x2=(u2,u3,u4) s1Dn(x1,,xn)0(ui)измерение, которое имеет желательные свойства .Dn

Например, последовательность Ван-дер-Корпута не полностью распределена равномерно, поскольку при точки находятся в квадрате а точки в . Следовательно, нет точек в квадрате , который предполагает , что при , для всех .s=2x2i(0,1/2)×[1/2,1)x2i1[1/2,1)×(0,1/2)(0,1/2)×(0,1/2)s=2Dn1/4n

Стандартные ссылки

Нидеррейтер (1992) монография и Fang и Ван (1994) текст место , чтобы пойти для дальнейшего исследования.


4
Этот ответ превосходен, и я просто хотел оценить ваши усилия. Спасибо!
Anony-Mousse

1
Один маленький вопрос для продолжения. Последовательности Хэлтона выглядят хорошо, потому что они также кажутся не слишком регулярными. Для меня очень важна структура решетки, а также последовательность Хаммерсли, кажется, имеет много объектов на линиях через начало координат. Какой хороший способ контролировать баланс между истинной формой и поддельной формой? Просто возьмите 80% вклада Хэлтона + 20% равномерного рандома?
Anony-Mousse

1
+ 10к и определенно с рекордно низким (87 !!!!) ответами! О, и мне очень нравится этот пост. На самом деле я поставил этот вопрос в закладки. Отлично, @cardinal.
Макро

@Macro: Спасибо за такой хороший комментарий! Ты очень добр. Я думаю, что это 10K вещь может быть временным для меня. Я подозреваю, что могу упасть ниже 10K, как только голоса прокрастинатора будут возвращены. Я удивлен, что этого еще не произошло, на самом деле. Я полагаю, что они отдали почти 3000 голосов на этом сайте. Спасибо также за размещение здесь; почему-то я никогда не видел последующих вопросов Анони-Мусса!
кардинал

@ Anony-Mousse: извинения за ужасную задержку с ответом. Должно быть, я пропустил эти комментарии. Я думаю, что создание баланса будет зависеть от ваших целей. Теоретически говоря, введение любых случайных равномерных точек неизбежно приведет к разрушению, например, оптимальных свойств . С практической точки зрения, может быть лучше использовать очень маленький джиттер точек QMC, где джиттер выбран на основе свойств последовательности. Вы также можете ввести случайные преобразования твердого тела во всех точках, например, сдвиги и вращения координат. DD
кардинал

3

Один из способов сделать это состоит в том, чтобы сгенерировать однородные случайные числа, затем проверить «близость», используя любой метод, который вам нравится, и затем удалить случайные элементы, которые слишком близки к другим, и выбрать другой набор случайных униформ, чтобы восполнить их.

Будет ли такое распределение проходить каждый тест на однородность? Я надеюсь, что нет! Он больше не распределен равномерно, теперь это другой дистрибутив.

Один неинтуитивный аспект вероятности - это случайность. В случайных данных больше прогонов, чем думают люди. Я думаю, что Тверский провел некоторое исследование по этому вопросу (хотя он исследовал так много, что его трудно запомнить).


2
Одна из (многих) проблем этого подхода заключается в том, что очень сложно охарактеризовать получающееся распределение.
whuber

ОП, похоже, больше всего беспокоит маленький размер выборки. Это говорит о том, что ему не нужно заботиться о всей раздаче. Предположим, у вас есть набор координат, вы генерируете другие, а затем вычисляете евклидово расстояние относительно всех остальных. Если наименьшее расстояние ниже некоторого порога, выбросьте число и сгенерируйте новое. Я думаю, что решение Питера работает отлично.
Джон

@whuber Кажется, ему это не интересно, хотя я могу ошибаться.
Питер Флом - Восстановить Монику

2
Позвольте мне выразить свое возражение немного яснее, Питер: когда вы удаляете и / или настраиваете псевдослучайные значения специальным образом для аппроксимации некоторого желаемого свойства, такого как отсутствие кластеризации, трудно гарантировать, что результирующие последовательности имеют любые желательные свойства. С вашим методом, например, не могли бы вы сказать нам, каким будет первый момент полученного процесса? (То есть, вы можете даже заверить нас, что интенсивность одинакова?) Как насчет второго момента? Обычно они составляют минимальную информацию, необходимую для эффективного использования последовательностей для вывода.
whuber

2
Хорошо, но, в примере в вопросе, он хочет разместить сокровище на карте в игре. Это не будет включать вывод или моменты или что-то в этом роде. Я признаю, что мой метод не подходит для многих целей, но я думаю, что он соответствует примеру. Конечно, может быть, пример не совсем то, что он хочет ... Может быть, он хочет что-то более формальное, и в этом случае следует рассмотреть все остальные ответы.
Питер Флом - Восстановить Монику

3

Это известно как «ядро» пуассоновского точечного процесса - так назвал Брайан Рипли в 1970-х; то есть вы хотите, чтобы оно было случайным, но вы не хотите, чтобы какие-либо точки были слишком близко друг к другу. «Жесткое ядро» можно представить как буферную зону, в которую не могут проникнуть другие точки.

Представьте, что вы записываете положение некоторых автомобилей в городе - но вы записываете только точку в номинальном центре автомобиля. Пока они на улицах, две пары точек не могут сблизиться, потому что точки защищены "жесткой" конструкцией кузова - мы будем игнорировать потенциальную суперпозицию в многоэтажных парковках :-)

Существуют процедуры для генерации таких точечных процессов - один из способов - это просто сгенерировать точки равномерно, а затем удалить все, которые находятся слишком близко друг к другу!

Для некоторых подробностей о таких процессах, обратитесь, например, к этому


2

Что касается генерации пакетов заранее, я бы сгенерировал большое количество наборов псевдослучайных переменных, а затем протестировал их с помощью теста, такого как тест Колмогорова-Смирнова. Вы хотите выбрать набор, который имеет наибольшее значение p (т. Е. является идеальным). Обратите внимание, что это будет медленно, но по мере увеличения оно, вероятно, становится менее необходимым. p1N

Что касается инкрементальной генерации, вы, по сути, ищете серию с умеренно отрицательной автокорреляцией. Я не уверен, как лучше всего это сделать, поскольку у меня очень ограниченный опыт работы с временными рядами, но я подозреваю, что для этого существуют алгоритмы.

Что касается теста на «слишком четный», то любой тест на то, соответствует ли образец определенному распределению (например, KS, отмеченный выше), вы просто хотите проверить, если , а не стандартный подход. Я написал пример такого альтернативного подхода: хи-квадрат всегда односторонний тест . p>(1α)


1

Я бы формализовал вашу проблему следующим образом: вы хотите распределение по так, чтобы плотность была для некоторого определяющего отталкивание точек.[0,1]nf(x)e(1kij|xixj|k)1kk<0

Один простой способ создать такие векторы - сделать выборку Гиббса.


Вы можете остановиться на этом? Выборка Гиббса здесь, похоже, не помогает, так как условное распределение = предельное распределение = равномерное? Или вы предлагаете использовать предыдущие образцы для создания «дыр» в распределении для отбора образцов?
Anony-Mousse

Выберите равномерный случайный вектор, а затем несколько раз равномерно выберите индекс и повторите выборку . Рассчитайте отношение к до и после повторной выборки и отклоните повторную выборку с коэффициентами . Это намного быстрее, чем другие ответы, которые вы получили, когда у вас очень длинный вектор, потому что вы выполняете локальные, а не глобальные отклонения. ixirf(x)r
Нил Г
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.