Рівномірна вибірка з симплексу


29

Я шукаю алгоритм для створення масиву з N випадкових чисел, таким чином, що сума N чисел дорівнює 1, а всі числа лежать в межах 0 і 1. Наприклад, N = 3, випадкова точка (x, y, z) повинен лежати в межах трикутника:

x + y + z = 1
0 < x < 1
0 < y < 1
0 < z < 1

В ідеалі я хочу, щоб кожна точка в межах області мала однакову ймовірність. Якщо це занадто важко, я можу відмовитись від вимоги. Спасибі.


Що таке цільовий розподіл? Що ви пробували?
Рафаель

3
Зауважте, що завжди є вибірки відхилення : виберіть однакових чисел і відхиліть, якщо числа не дорівнюють 1 . Тут очікувана кількість ітерацій незручно висока, тому вам слід зробити щось інше. н1
Рафаель

Відповіді:


28

Спершу припустимо, що ви хочете зробити вибірку всередині

x + y + z = 1
0 ≤ x ≤ 1
0 ≤ y ≤ 1
0 ≤ z ≤ 1

Це не має великої різниці, оскільки точка вибірки все ще буде лежати у запитуваній області з великою ймовірністю.

Тепер вам залишається вибір вибір точки від симплексу . У 3d прикладі ви отримуєте 2d симплекс (трикутник), реалізований у 3d.

Як рівномірно підібрати крапку, було обговорено в цьому дописі (див. Коментарі).

Для вашої проблеми це означатиме, що ви берете випадкових чисел з інтервалу ( 0 , 1 ) , потім додаєте 0 і 1, щоб отримати список n + 1 чисел. Ви сортуєте список, а потім записуєте відмінності між двома послідовними елементами. Це дає вам список російськихн-1(0,1)01н+1н номерів, який становитиме . Крім того, ця вибірка є рівномірною. Цю ідею можна знайти у Дональда Б. Рубіна, байесівської завантажувальної Енн. Статист. 9, 1981, 130-134.1

Наприклад ( ) у вас є три випадкових числа,тоді ви отримуєте відсортовану послідовність,і це дає відмінності, і будуючи ці чотири числа дорівнюють 1.н=40.4 0.2 0.10 0.1 0.2 0.4 10.1 0.1 0.2 0.6

Інший підхід полягає в наступному: спочатку зразок з гіперкуба (тобто ви забули про нього x+y+z=1), а потім нормалізуйте точку зразка. Нормалізація - це проекція від -гіперкуби до d - 1 -прости. Слід зрозуміти, що точки в центрі симплекса мають більше "точок попереднього зображення", ніж зовнігг-1. Отже, якщо ви маєте рівномірну пробу з гіперкуба, це не дає вам рівномірного відбору проб у симплексі. Однак якщо взяти зразок з гіперкуба з відповідним експоненціальним розподілом, цей ефект скасовується. Малюнок дає вам уявлення про те, як обидва способи будуть проводити вибірку. Однак я віддаю перевагу методу «сортування» через його просту форму. Це також простіше здійснити.

Приклад 2-х методів вибірки


Я здогадуюсь, що наївна ідея - намалювати чисел із ( 0 , 1 ) і нормалізувати - то несправна, значить. н(0,1)
Рафаель

Я звернувся з вашим питанням у розширеній відповіді.
А.Шульц

1
Чи є простий доказ, який показує, що сортування дає рівномірний розподіл? У мене є лише елементарний фон, ймовірно, тому папір над головою.
Чао Сю

5
@ChaoXu просто зауважте, що між числами в симплексі та розділами інтервалу ( 0 , 1 ) на n підінтервалів існує відповідність 1 на 1 . алгоритм вибірки відповідає "закидання" n - 1 випадкових "інтервальних кінцевих точок" на ( 0 , 1 ) . ви можете спробувати переконатися, що це рівномірно, скажімо, за допомогою індукції та використання умовної ймовірності. н(0,1)нн-1(0,1)
Сашо Ніколов

1
@Orient: Будь ласка, задавайте вам питання в окремому дописі і не зловживайте коментарями до цього.
А.Шульц

8

Це потрібно додати до існуючих відповідей.

Devroye - це відмінна довідка для запитань подібного роду. У главі 7 наведені алгоритми, необхідні для формування єдиної статистики замовлень, яка є ОП.

Для генерації єдиної статистики замовлень буде сортувати вибірок [ 0 , 1 ] . Цей підхід потребує часу O ( n log n ) . Більш швидкий спосіб (доступний у книзі) включає вибірку n випадкових чисел x 1 , , x n з E x p ( 1 ) pdf. (Це проміжки формату pdf). Потім поверніть значення ( y i ) n = 1н[0,1]О(нжурналн)нх1,,хнЕхp(1)

(уi)1iн=1iхj1нхj
О(н)

[0,1]2х+3у+z=5


Якщо я дотримуюся відповіді тут: stackoverflow.com/questions/2106503/… Тоді генерування випадкового числа з експоненціального розподілу передбачає оцінку логарифму, який може бути трохи повільним.
R zu

3
X[0] = 0
for i = 1 to N-1
    X[i] = uniform(0,1)
X[n] = 1
sort X[0..N]
for i = 1 to N
    Z[i] = X[i] - X[i-1]
return Z[1..N]

Тут uniform(0,1)повертається дійсне число незалежно та рівномірно розподіляється між 0 і 1.


5
Це відповідь А. Шульца в коді без пояснень, правда?
Рафаель

1

Дивіться цей документ : Smith, N. and Tromble, R., Відбір проб рівномірно з одиничного симплексу .


2
Будь ласка, відформатуйте свою відповідь читабельним способом: ви пишете для людей, а не для компілятора bibtex. Крім того, якщо папір доступна в Інтернеті, вам набагато ефективніше надати посилання.
Девід Річербі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.