Пропустить до содержимого

Как использовать np.random.normal?

[

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

Введение

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

Нормальное распределение также называется гауссовым распределением или просто колоколообразной кривой. Последнее название намекает на форму распределения при его отображении на графике. Нормальное распределение симметрично относительно своего пика. Из-за этой симметрии среднее значение распределения, часто обозначаемое μ, находится на этом пике. Стандартное отклонение, σ, описывает, насколько широко распределение разбросано.

Если некоторые выборки имеют нормальное распределение, то вероятно, что случайная выборка будет иметь значение, близкое к среднему значению. Фактически, около 68 процентов всех выборок находятся в пределах одного стандартного отклонения от среднего значения.

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

Как вы узнаете, с помощью правильного кода на Python вы можете выполнять мощный статистический анализ. Чтобы получить код из этого учебника, нажмите ссылку ниже:

Shell

$ python -m pip install numpy matplotlib scipy

Помимо NumPy, вы установили Matplotlib и SciPy, поэтому вы готовы начать.

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

Python

import numpy as np
rng = np.random.default_rng()

Генератор случайных чисел (RNG) может генерировать случайные числа из различных распределений. В данном случае вам интересно нормальное распределение. Функция normal() генерирует случайные числа из нормального распределения с указанными средним и стандартным отклонением. Например, чтобы сгенерировать 10 случайных чисел с нормальным распределением со средним значением 0 и стандартным отклонением 1, вы можете использовать следующий код:

import numpy as np
rng = np.random.default_rng()
random_numbers = rng.normal(0, 1, 10)
print(random_numbers)

Вы можете изменить среднее значение (0), стандартное отклонение (1) и количество случайных чисел (10), чтобы получить разные результаты.

Чтобы сгенерировать больше случайных чисел, просто увеличьте третий аргумент функции normal(). Например, чтобы сгенерировать 100 случайных чисел, вы можете использовать следующий код:

random_numbers = rng.normal(0, 1, 100)

Этот код создаст массив из 100 случайных чисел, распределенных по нормальному закону с средним значением 0 и стандартным отклонением 1.

Визуализация нормально распределенных чисел

Часто полезно визуализировать случайные числа, распределенные по нормальному закону. Модуль matplotlib.pyplot включает в себя функцию hist() для создания гистограммы чисел. Гистограмма представляет собой визуализацию распределения случайной выборки путем разделения всех возможных значений на диапазоны и подсчета количества значений в каждом диапазоне.

Python

import matplotlib.pyplot as plt
import numpy as np
rng = np.random.default_rng()
random_numbers = rng.normal(0, 1, 1000)
plt.hist(random_numbers, bins=30)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram of Random Numbers')
plt.show()

Этот код создаст гистограмму случайных чисел. Аргумент bins определяет количество столбцов на гистограмме. В этом случае используется 30 столбцов. Функции xlabel(), ylabel() и title() используются для задания подписей осей и заголовка графика.

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

Указание среднего значения и стандартного отклонения

Вы можете явно указать среднее значение и стандартное отклонение при генерации случайных чисел из нормального распределения. Для этого используйте параметры loc и scale функции normal(). Например, чтобы сгенерировать 1000 случайных чисел с средним значением 10 и стандартным отклонением 2, используйте следующий код:

random_numbers = rng.normal(loc=10, scale=2, size=1000)

Таким образом, среднее значение установлено равным 10, стандартное отклонение - 2, а количество случайных чисел - 1000.

Работа со случайными числами в NumPy

NumPy предлагает множество функций для работы с распределением случайных чисел. Например, вы можете вычислить среднее значение и стандартное отклонение случайных чисел с помощью функций mean() и std(). Например:

mean_value = np.mean(random_numbers)
std_value = np.std(random_numbers)

Вы можете также использовать функцию min() и max() для нахождения минимального и максимального значения случайных чисел.

Итерация к нормальности с помощью центральной предельной теоремы

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

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

NumPy упрощает выполнение центральной предельной теоремы с помощью функции random.normal() и цикла for. В следующем примере генерируются 1000 выборок из нормального распределения, после чего вычисляется среднее значение для каждой выборки и сохраняется в массиве:

means = []
for _ in range(1000):
sample = rng.normal(0, 1, 100)
sample_mean = np.mean(sample)
means.append(sample_mean)

После выполнения этого кода у вас будет массив means, содержащий 1000 средних значений выборок. Вы можете визуализировать это распределение, используя функцию hist() из модуля matplotlib.pyplot:

plt.hist(means, bins=30)
plt.xlabel('Mean Value')
plt.ylabel('Frequency')
plt.title('Distribution of Sample Means')
plt.show()

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

Заключение

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

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