2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 генератор случайного вектора на сфере
Сообщение21.08.2022, 08:32 


27/10/09
602
Дамы и Господа!

Понадобился генератор $n$-мерного случайного вектора, равномерно распределенного на гиперсфере радиуса 1. Два вопроса:
1. Насколько корректен такой генератор - генерируем случайный вектор $t$ из $n$-мерного нормального распределения с нулевым центром и единичной ковариационной матрицей и делим его на его собственную евклидову норму? Какие еще есть генераторы?
2. Как проверить, что выборка взята именно из равномерного распределения на гиперсфере, ведь компоненты вектора зависимы?

 Профиль  
                  
 
 Re: генератор случайного вектора на сфере
Сообщение21.08.2022, 09:07 
Заслуженный участник


11/05/08
32166
Самый дешёвый способ -- генерировать векторы, равномерно распределённые в кубе, отбраковывать их по попаданию в шар (и, на всякий случай, по непопаданию в маленький шарик в центре), затем нормировать. Конечно, с ростом размерности эффективность быстро снижается (при $n=10$ будет примерно $\frac1{400}$). Однако при не слишком больших $n$ вряд ли можно придумать что-нибудь лучшее.

 Профиль  
                  
 
 Re: генератор случайного вектора на сфере
Сообщение21.08.2022, 09:47 


10/03/16
4444
Aeroport
ewert
Вопрос вроде был про корректность предложенного генератора(который в вычислительном плане тоже весьма недорог), не?

AndreyL в сообщении #1563198 писал(а):
Как проверить,


Навскидку: берете кучу случайных гауссовых векторов (ненормированных). И берете огромную выборку из Вашего "сферического" распределения. Для каждого вектора положительных и отрицательных скалярных произведений с выборкой должно быть примерно одинаково

 Профиль  
                  
 
 Re: генератор случайного вектора на сфере
Сообщение21.08.2022, 10:03 
Заслуженный участник


11/05/08
32166
ozheredov в сообщении #1563203 писал(а):
корректность предложенного генератора(который в вычислительном плане тоже весьма недорог)

С корректностью того метода проблем, естественно, нет (при условии, конечно, что корректен сам генератор нормального распределения). Проблема в том, что нормальное распределение генерируется гораздо дольше, чем равномерное (которое в простейших случаях реализуется вообще за две целочисленные арифметические операции). И если эффективность отбраковки не слишком мала (округлённо $75\%$ при $n=2$, $50\%$ при $n=3$, $30\%$ при $n=4$), то метод с отбраковкой явно выгоднее. А вот при $n=10$ уже явно наоборот.

 Профиль  
                  
 
 Re: генератор случайного вектора на сфере
Сообщение21.08.2022, 10:34 


27/10/09
602
ewert в сообщении #1563201 писал(а):
Самый дешёвый способ -- генерировать векторы, равномерно распределённые в кубе, отбраковывать их по попаданию в шар ...
Да, я слышал о таком методе, но меня смутила проверка на попадание в шар, думал долго будет. На самом деле это значительно быстрее, чем генерировать нормальные векторы, а если организовать в цикле, то и код компактный получается, спасибо за подсказку о скорости генерации равномерного.

Про проверку не очень понял - объемы выборок должны быть одинаковые, или делать умножение каждого вектора моей выборки с каждым вектором нормального распределения?

 Профиль  
                  
 
 Re: генератор случайного вектора на сфере
Сообщение21.08.2022, 14:22 


10/03/16
4444
Aeroport
ewert в сообщении #1563205 писал(а):
Проблема в том, что нормальное распределение генерируется гораздо дольше, чем равномерное


Согласен, но современные пакеты без труда генерируют нормалки миллиардами (под дешевизной я это имел в виду).

AndreyL в сообщении #1563207 писал(а):
Про проверку не очень понял - объемы выборок должны быть одинаковые, или делать умножение каждого вектора моей выборки с каждым вектором нормального распределения?


Предположим, у Вас уже есть куча сгенерированных "сферических" векторов RANDN. Далее, Вы делаете множество ненормированных нормально распределенных тестовых векторов TEST. Оно может быть не очень большим. Теперь для каждого вектора TEST Вы считаете знаки скалярных произведений со всеми векторами RANDN. Если во всех случаях знаков примерно поровну, то все хорошо.

Потом можно слегка усложнить, беря в качестве TEST рандомные ортонормированные базисы (полученные, например, из собственных векторов матрицы $A^TA$, где $A$ составлена из равномерных рандомов). Знаки скалярных произведений будут образовывать последовательности, каждая из которых должна встречаться примерно одно и то же количество раз.

 Профиль  
                  
 
 Re: генератор случайного вектора на сфере
Сообщение21.08.2022, 14:56 


27/10/09
602
ozheredov в сообщении #1563212 писал(а):
Предположим, у Вас уже есть куча сгенерированных "сферических" векторов RANDN. Далее, Вы делаете множество ненормированных нормально распределенных тестовых векторов TEST. Оно может быть не очень большим. Теперь для каждого вектора TEST Вы считаете знаки скалярных произведений со всеми векторами RANDN. Если во всех случаях знаков примерно поровну, то все хорошо
Так, наверное, можно построить критерий - посчитать. каких знаков меньше и определить вероятность того, что знаков будет еще меньше по биномиальному распределению (вероятность знака 1/2) - это и будет p-value или "достижимый уровень значимости". Кстати. как в этом случае правильно, считать вероятность строго меньше найденного значения или меньше-равно? Не часто работаю с дискретными критериями.

 Профиль  
                  
 
 Re: генератор случайного вектора на сфере
Сообщение21.08.2022, 15:07 


10/03/16
4444
Aeroport
AndreyL в сообщении #1563214 писал(а):
Так, наверное, можно построить критерий - посчитать. каких знаков меньше и определить вероятность того, что знаков будет еще меньше по биномиальному распределению (вероятность знака 1/2) - это и будет p-value

Именно!
AndreyL в сообщении #1563214 писал(а):
Кстати. как в этом случае правильно, считать вероятность строго меньше найденного значения или меньше-равно?

Я бы рассмотрел гипотезу распределения $[0.5; 0.5]$ при уровне значимости 0.01. Если для всех векторов из TEST эта гипотеза прокатывает, то ладушки. И не надо считать вероятность )

 Профиль  
                  
 
 Re: генератор случайного вектора на сфере
Сообщение21.08.2022, 15:45 


27/10/09
602
Имеется ввиду, то для любого целого критического значения при больших объемах выборки вероятность будет иметь очень много знаков после запятой, т.е. для любого разумного уровня значимости нет целого критического значения? Или как-то не так? Если так, то можно считать вероятность строго меньше и говорить. что p-value не меньше. Это для принятия гипотезы о равномерности, для отвержения наоборот. По p-value сразу видно, не нужно заранее задавать уровни значимости и считать критические значения: если p-value больше, например, 5% (а лучше 20%), то принимаем гипотезу, если меньше, например, 1% (лучше 0.1% или 0.01%), то отвергаем, если между - то думаем.

 Профиль  
                  
 
 Re: генератор случайного вектора на сфере
Сообщение21.08.2022, 16:10 
Заслуженный участник


18/09/21
1756
ewert в сообщении #1563205 писал(а):
Проблема в том, что нормальное распределение генерируется гораздо дольше, чем равномерное
Ну не гораздо.
Из равномерного легко получается нормальное: Generating values from normal distribution.

 Профиль  
                  
 
 Re: генератор случайного вектора на сфере
Сообщение21.08.2022, 16:22 


27/10/09
602
zykov в сообщении #1563219 писал(а):
Из равномерного легко получается нормальное: Generating values from normal distribution.
Согласен, но проверка квадрата длины вектора (его все равно считать) на "меньше единицы" делается быстрее, чем взятие функции ошибок. Но согласен и с тем, что на современных машинах миллионные выборки нормального распределения генерируются секунды, поэтому так и делал.

 Профиль  
                  
 
 Re: генератор случайного вектора на сфере
Сообщение21.08.2022, 17:50 
Заслуженный участник


18/09/21
1756
AndreyL в сообщении #1563220 писал(а):
на современных машинах миллионные выборки нормального распределения генерируются секунды
Вот Octave (свободный аналог Matlab) сгенерировал миллион значений за 15 миллисекунд (для равномерного распределения было 8.5 миллисекунд).
Используется синтаксис Matlab M
>> t1=time;x=randn(1000,1000);time-t1
ans =  0.015062
>> t1=time;x=rand(1000,1000);time-t1
ans =  0.0084100
(А 100 миллионов за 1.5 секунды.)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group