Генерация распределения Гаусса только с положительными числами

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

14
задан Whatsit 5 November 2009 в 22:12
поделиться

8 ответов

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

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

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

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

7
ответ дан 1 December 2019 в 07:52
поделиться

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

-6
ответ дан 25 October 2019 в 20:42
поделиться

Вы можете использовать логнормальное распределение.

7
ответ дан 1 December 2019 в 07:52
поделиться

Во-первых, вы не можете сгенерировать только положительные значения из распределения Гаусса.

Во-вторых, правильно ли я понимаю, что вы пытаетесь сгенерировать случайное распределение с заданным средним и стандартным отклонением? Подойдет ли какая-нибудь раздача? Если это так, пусть среднее значение = м , а стандартное отклонение = с . Я предполагаю, что m - s> 0 .

let n = random integer modulo 2;
if n equals 0 return m - s
else return m + s

Значения, возвращаемые этим процессом, будут иметь среднее м и стандартное отклонение с .

8
ответ дан 1 December 2019 в 07:52
поделиться

Почему бы не использовать метод передискретизации? Если в вашей выборке n чисел, просто возьмите n случайных выборок из выборки, с заменой . Результирующий набор будет иметь ожидаемое среднее значение и дисперсию примерно так же, как и исходная выборка, но обычно они будут немного отличаться.

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

5
ответ дан 1 December 2019 в 07:52
поделиться

Я не смог устоять - мне очень нравится угол Джейсона, но я не был счастлив, что его ответ охватывает только те случаи, когда m> s, поэтому Следуя его идее, я разработал общее решение.
Самым простым распределением с заданными m, s и положительными членами является

с вероятностью p, возврат 0
с вероятностью (1-p) вернуть m / (1-p)
где (1-p) = m ^ 2 / (m ^ 2 + s ^ 2)

Доказательство: для распределения X с двумя исходами lowX с вероятностью p и highX с вероятностью (1-p),
m = E [X] = px lowX + (1-p) x highX
s ^ 2 = Дисперсия (X) = E [X ^ 2] - E [X] ^ 2 = px lowX ^ 2 + (1-p) x highX ^ 2 - m ^ 2

Установите lowX в 0 и разрешите в highX и стр.

4
ответ дан 1 December 2019 в 07:52
поделиться

Если я правильно вас понял, вы хотите сгенерировать случайные числа из распределения с положительной поддержкой. Есть много возможных вариантов. Самым простым является

хи-квадрат: http://en.wikipedia.org/wiki/Chi-square_distribution (который является просто суммой двух квадратов гауссиана)

Все ассиметрические распределения (экспоненциальное, вейбулловское, Парето, обратное гауссовское, логнормальное, гамма)

Все распределения из асимметричного семейства (косонормального, косого -student, ...)

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

1
ответ дан 1 December 2019 в 07:52
поделиться

DoSomething должен возвращать экземпляр класса с методом DoAlse.

-121--4180405-

q = bObjects.filter (c_d=d) //Give me d not defined. но d является объектом, подобным c в объекте B.

Попробуйте сделать следующее:

from django.db.models import F
q = bObjects.filter(c__d=F('d'))

Что касается вопроса из вашего комментария ниже, вы можете иметь 1 sql-запрос вместо 100 следующими способами:

1), если можно выразить выбор объектов A в виде запроса (например, a.price < 10 и a.weight > 20), используйте следующее:

B.objects.filter(a__price__lt=10, a__weight__gt=20, c__d=F('d'))

или это:

B.objects.filter(a__in=A.objects.filter(price__lt=10, weight__gt=20), c_d=F('d'))

2) если у вас только что есть список python объектов A, используйте следующее:

B.objects.filter(a__pk__in=[a.pk for a in your_a_list], c__d=F('d'))
-121--4013164-

Вы можете использовать любое распределение, которое имеет положительную поддержку И может быть определено средним и дисперсией. Например, распределение

  • одного параметра не будет работать в целом. Например, хи-квадрат не будет работать, если ваша дисперсия всегда вдвое превышает ее среднее значение. Аналогично экспоненциальный не будет работать, если ваша дисперсия не равна вашей средней в квадрате.
  • некоторые двухпараметрические распределения в некоторых случаях не работают. Биномиальное распределение не сработает, если дисперсия не меньше вашего среднего. Точно так же нецентральный хи-квадрат не будет работать, если ваша дисперсия больше чем в 2 раза вашего среднего и меньше чем в 4 раза вашего среднего!
  • Однако log-normal и gamma будут работать во всех случаях.
2
ответ дан 1 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: