Я хочу создать случайное число с плавающей точкой в диапазоне [0, 1) из одностороннего дистрибутива, который выглядит следующим образом:  введите описание изображения здесь

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

3
taurus 1 Июл 2019 в 22:36

3 ответа

Лучший ответ

Вы можете использовать бета-версию, например.

import numpy as np

np.random.seed(2018)
np.random.beta(2, 5, 10)
#array([ 0.18094173,  0.26192478,  0.14055507,  0.07172968,  0.11830031,
#        0.1027738 ,  0.20499125,  0.23220654,  0.0251325 ,  0.26324832])

Здесь мы рисуем числа из Beta(2, 5) распределения

enter image description here

Бета-распределение является очень универсальным и фундаментальным распределением в статистике; не вдаваясь в подробности, изменив параметры alpha и beta, вы можете сделать распределение левосторонним, наклонным правым, равномерным, симметричным и т. д. Распределение определяется в интервале {{X2} } что соответствует тому, что вы ищете.


Более технический комментарий

В то время как дистрибутив Kumaraswamy определенно обладает более мягкими алгебраическими свойствами, чем Бета-версия Я бы сказал, что последний является более фундаментальным; например, в байесовском умозаключении распределение Beta часто входит в число предшествующих сопряженных при работе с биномиальными (-подобными) процессами.

Во-вторых, среднее значение и дисперсия бета-распределения могут быть выражены довольно просто через параметры alpha, beta; например, среднее значение просто дается alpha / (alpha + beta).

Наконец, с точки зрения вычислительного и статистического вывода, подгонка бета-распределения к данным обычно выполняется в несколько строк кода в Python (или R), где большинство библиотек Python, таких как numpy и scipy уже включают методы для работы с бета-дистрибутивом.

2
Maurits Evers 2 Июл 2019 в 09:37

Посмотрите на метод numpy.random.chisquare библиотека.

numpy.random.chisquare(df, size=None)

>>> np.random.chisquare(2,4)
array([ 1.89920014,  9.00867716,  3.13710533,  5.62318272])
1
blackbrandt 1 Июл 2019 в 19:39

Я бы склонялся к распределению, которое естественно ограничено интервалом [0 ... 1] (или любым другим интервалом [a ... b], который может быть изменен позже), как ответ @MauritsEvers. Причина в том, что вы знаете дистрибутив и можете получить (или прочитать) некоторые интересные факты о нем. Если вы используете chi2 и усечь его, неясно, как спорить о свойствах того, что у вас есть.

Лично я предпочитаю дистрибутив Kumaraswamy, а не бета-дистрибутив, выражения для среднего значения, режима, дисперсии и т. Д. проще.

Просто установите его

pip install kumaraswamy

И образец

from kumaraswamy import kumaraswamy

d = kumaraswamy(a=2.0, b=5.0)

q = d.rvs(10)
print(q)

Произведет 10 чисел, следующих за пурпурной кривой в статье Wiki.

Если вы не хотите бета или кумарасвами, то есть, например, Логит-нормальное распространение и еще несколько других

2
Severin Pappadeux 2 Июл 2019 в 02:32