Генерировать равномерно распределенные веса, которые составляют единицу?


14

Обычно используются веса в приложениях, таких как моделирование смесей, и для линейного объединения базисных функций. Веса часто должны подчиняться 0 и . Я бы хотел случайным образом выбрать вектор веса из равномерного распределения таких векторов.wiwiiwi=1w=(w1,w2,)

Может быть заманчиво использовать где U (0, 1), однако, как обсуждалось в комментариях ниже, распределение \ mathbf {w } не является равномерным.wi=ωijωjωiw

Однако, учитывая ограничение iwi=1 , кажется, что размерность проблемы лежит в n1 , и что должна быть возможность выбрать w , выбрав n1 параметров в соответствии с некоторое распределение, а затем вычисление соответствующего w из этих параметров (поскольку после определения n1 весов оставшийся вес полностью определяется).

Проблема , как представляется, аналогична точке сферы собирания проблемы (но, а не выбирать 3-векторы, 2 нормы равна единица, я хочу , чтобы выбрать n -векторы которых 1 нормы равна единица).

Благодарность!


3
Ваш метод не генерирует равномерно распределенный вектор на симплексе. Чтобы сделать то, что вы хотите правильно, самый простой способ - сгенерировать iid случайных величин, а затем нормализовать их по их сумме. Вы можете попытаться сделать это, найдя какой-то другой метод для рисования только вариаций напрямую, но у меня есть сомнения относительно компромисса эффективности, так как вариации могут быть очень эффективно сгенерированы из меняется. nExp(1)n1U ( 0 , 1 )Exp(1)U(0,1)
кардинал

Ответы:


22

Выберите равномерно (с помощью единичных вещественных чисел в интервале ). Сортируйте коэффициенты так, чтобы . Устанавливать n - 1 [ 0 , 1 ] 0 x 1x n - 1x[0,1]n1n1[0,1]0x1xn1

w=(x1,x2x1,x3x2,,xn1xn2,1xn1).

Поскольку мы можем восстановить отсортированный с помощью частичных сумм , отображение равнодо 1; в частности, его образ - это симплекс в . Поскольку (a) каждый своп в сортировке является линейным преобразованием, (b) предыдущая формула является линейной, и (c) линейные преобразования сохраняют равномерность распределений, однородность подразумевает однородность на симплексе . В частности, обратите внимание, что маргиналы не обязательно независимы.w i xw ( n - 1 ) ! n - 1 R n x w n - 1 wxiwixw(n1)!n1Rnxw n1w

3D точечный сюжет

Этот трехмерный точечный график показывает результаты 2000 итераций этого алгоритма для . Точки ограничены симплексом и приблизительно равномерно распределены по нему.n=3


Поскольку время выполнения этого алгоритма , оно неэффективно для больших . Но это действительно отвечает на вопрос! Лучший способ (в общем случае) генерировать равномерно распределенные значения на симплексе - нарисовать равномерных вещественных чисел на интервале , вычислитьn n - 1 n ( x 1 , , x n ) [ 0 , 1 ]O(nlog(n))O(n)nn1n(x1,,xn)[0,1]

yi=log(xi)

(что делает каждый положительным с вероятностью , откуда их сумма почти наверняка равна нулю) и установить 1yi1

w=(y1,y2,,yn)/(y1+y2++yn).

Это работает, потому что у каждого есть распределение , что подразумевает, что имеет распределение Dirichlet - и это равномерно. Γ ( 1 ) w ( 1 , 1 , 1 )yiΓ(1)w(1,1,1)

[3D точечный график 2]


1
@Chris Если под «Dir (1)» вы подразумеваете распределение Дирихле с параметрами = , то ответ - да. ( 1 , 1 , , 1 )(α1,,αn)(1,1,,1)
whuber

1
(+1) Небольшой комментарий: интуиция отличная. Может потребоваться осторожность при интерпретации (а), так как кажется, что «линейное преобразование» в этой части является случайным . Тем не менее, это легко обойти за счет дополнительной формальности, используя взаимозаменяемость процесса генерации и определенное свойство инвариантности.
кардинал

1
Более конкретно: для распределений с плотностью плотность статистики порядка выборки iid размера равна . В случае распределение статистики порядка равномерно на многограннике. Исходя из этого, остальные преобразования являются детерминированными, и результат следует. fnn!f(x1)f(xn)1(x1<x2<<xn)f=1[0,1](x)
кардинал

1
@cardinal Это интересный момент, но я не думаю, что это имеет значение, хотя вы правы, что дополнительные детали могут помочь. Свопы ( на самом деле отражения, ква линейные преобразования) не являются случайными: они предопределены. Фактически, вырезано вобласти, из которых одна отличается от других, и существует заранее определенная аффинная биекция между каждой областью и выделенной. Таким образом, единственный дополнительный факт, который нам нужен, заключается в том, что равномерное распределение в области является равномерным на любом измеримом ее подмножестве, что является полной тривиальностью. In1=[0,1]n1(n1)!
whuber

2
@whuber: Интересные замечания. Спасибо, что поделился! Я всегда ценю ваши проницательные мысли о таких вещах. Что касается моего предыдущего комментария о «случайном линейном преобразовании», то я хотел сказать, что, по крайней мере через , используемое преобразование зависит от точки выборки . Другой способ думать об этом - это фиксированная, предопределенная функция такая, что , но я бы не назвал эту функцию линейной, хотя она является линейной на подмножествах, которые разбивают -куб. :)xωT:Rn1Rn1w=T(x)(n1)
кардинал

1
    zz <- c(0, log(-log(runif(n-1))))
    ezz <- exp(zz)
    w <- ezz/sum(ezz)

Первая запись обнуляется для идентификации; Вы увидите, что это делается в многочленных логистических моделях. Конечно, в полиномиальных моделях вы также будете иметь ковариаты под показателями степени, а не только случайные zzs. Распределение zzs является предельным распределением значений; это понадобится вам, чтобы убедиться, что полученные веса были вначале указаны rnormтам, но сначала я почувствовал, что это не сработает.


Это не работает Вы пытались посмотреть на гистограмму?
кардинал

4
Ваш ответ теперь почти правильный. Если вы сгенерируете iid и поделите каждый на сумму, то вы получите правильное распределение. Посмотрите распределение Dirichlet для большего количества деталей, хотя это не обсуждает это явно . nExp(1)
кардинал

1
Учитывая терминологию, которую вы используете, вы звучите немного смущенно.
кардинал

2
На самом деле, ссылка Wiki делает обсуждение этого (справедливо) в явном виде. Смотрите второй абзац под заголовком Поддержка .
кардинал

1
Эта характеристика является слишком ограничительной и слишком общей. Это слишком общее в том смысле, что полученное распределение должно быть "равномерным" на симплексе в . Он слишком ограничен тем, что вопрос сформулирован достаточно широко, чтобы позволить быть некоторой функцией вариативного распределения, которое, в свою очередь, предположительно , но не обязательно, состоит из независимого (и, возможно, iid) переменные. wn1Rnwn1n1
whuber

0

Решение очевидно. Следующий код MathLab дает ответ для 3 весов.

function [  ] = TESTGEN( )
SZ  = 1000;
V  = zeros (1, 3);
VS = zeros (SZ, 3);
for NIT=1:SZ   
   V(1) = rand (1,1);     % uniform generation on the range 0..1
   V(2) = rand (1,1) * (1 - V(1));
   V(3) = 1 - V(1) - V(2);  
   PERM = randperm (3);    % random permutation of values 1,2,3
   for NID=1:3
         VS (NIT, NID) = V (PERM(NID));
    end
end 
figure;
scatter3 (VS(:, 1), VS(:,2), VS (:,3));
end

enter image description here


1
Ваши маргиналы не имеют правильного распределения. Судя по статье в Википедии о распределении Дирихле (раздел генерации случайных чисел, в котором есть код, который вы закодировали), вы должны использовать бета (1,2) для V (1), а не равномерное [0,1] распределение.
Soakley

Похоже, что плотность увеличивается в углах этого наклонного треугольника. Тем не менее, это обеспечивает хорошее геометрическое отображение проблемы.
DWin
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.