Как создать случайное нормальное распределение с определенным стандартным отклонением

Я уже использовал эту функцию:

np.random.seed(40)
np.random.normal(loc = 0, scale = 1, size = 10)

Однако я предполагаю, что значения должны быть между 1 и -1, верно? Но я получаю значения больше 1 и меньше -1. Как это возможно?

Я получаю этот массив:

array([-0.6075477 , -0.12613641, -0.68460636,  0.92871475, -1.84440103,
       -0.46700242,  2.29249034,  0.48881005,  0.71026699,  1.05553444])

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

Возможное решение

Я сделал этот код, это нормально?

final_data = []
count = 0
a = 26 # standard deviation
b = 157 # mean

for i in range(2000):
    y = a*np.random.normal(0, 1, 1) + b # equation to multiply by the std and add the mean
    if y <= upper and y >= lower :
        final_data.append(y[0])
        count += 1
        if count > 608:
            break;

Где верхний и нижний - среднее + стандартное, а среднее - стандартное. Сначала я сгенерировал случайно распределенное число, а затем подставил его в уравнение. Если число находится в пределах определенного диапазона, я добавляю его в список.


person John Sall    schedule 05.03.2020    source источник
comment
Нормальные дистрибутивы не ограничены [-1, 1]en.wikipedia.org/wiki/Normal_distribution   -  person Thomas Schillaci    schedule 05.03.2020


Ответы (2)


Нормальное распределение не ограничивает диапазон значений. Это просто означает, что 68% значений будут находиться в пределах 1 стандартного отклонения от среднего; 95% в пределах 2 стандартных отклонений и 99,7% в пределах 3 стандартных отклонений. Теоретически вы можете получить любое значение от - бесконечности до бесконечности, независимо от вашего стандартного отклонения.

person Mohit S    schedule 05.03.2020
comment
Итак, как я могу это исправить? Как сделать так, чтобы он выдавал значения только в диапазоне [-1, 1]? - person John Sall; 05.03.2020
comment
Вы можете еще больше уменьшить стандартное отклонение (0,5, 0,3, 0,25 и т. д.). Но опять же, это НЕ означает, что вы никогда не получите значение за пределами [-1,1]. Есть шанс, что вы все еще можете, но вероятность становится меньше, когда вы уменьшаете свое стандартное отклонение. - person Mohit S; 05.03.2020

Просто чтобы добавить к предыдущему комментарию и ответить:

Если вы хотите получить случайные числа из интервала, вы должны выбрать распределение с верхней и нижней границей. Например, равномерное распределение дает равную вероятность каждому числу между верхней и нижней границей. Для numpy вы можете проверить это здесь: https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.uniform.html

person doeeehunt    schedule 05.03.2020
comment
Мне не нужны однородные числа, я хочу, чтобы они нормально распределялись, но только со стандартным значением 1. - person John Sall; 05.03.2020
comment
Затем вы также нарисуете значения, выходящие за пределы -1, 1. Границы нормального распределения равны +- бесконечности. В качестве обходного пути вы можете расширить свой код, чтобы отбросить любое значение за пределами вашего интервала и, возможно, нарисовать новое вместо него. Однако полученные числа не будут следовать нормальному распределению. - person doeeehunt; 05.03.2020