Spec-Zone.ru › NumPy 2.0

numpy.random.Generator.gumbel

метод

random.Generator.gumbel(loc=0.0, scale=1.0, size=None)

Генерирует выборки из распределения Гумбеля.

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

Параметры:
locfloat или array_like из float, необязательно

Точка моды распределения. По умолчанию 0.

scalefloat или array_like из float, необязательно

Параметр масштаба распределения. По умолчанию 1. Должен быть неотрицательным.

sizeint или кортеж из int, необязательно

Форма выходных данных. Если заданная форма, например, (m, n, k), то m * n * k выборок генерируется. Если size — None (по умолчанию), то возвращается одно значение, если loc и scale — скаляры. В противном случае np.broadcast(loc, scale).size выборок генерируется.

Возвращает:
outndarray или скаляр

Сгенерированные выборки из параметризованного распределения Гумбеля.

См. также

scipy.stats.gumbel_l
scipy.stats.gumbel_r
scipy.stats.genextreme
weibull

Примечания

Распределение Гумбеля (или распределение наименьших экстремальных значений (SEV) или распределение наименьших экстремальных значений типа I) относится к классу распределений обобщенных экстремальных значений (GEV), используемых для моделирования экстремальных задач. Распределение Гумбеля является частным случаем распределения экстремальных значений типа I для максимумов из распределений с «экспоненциальными» хвостами.

Плотность вероятности для распределения Гумбеля:

\[p(x) = \frac{e^{-(x - \mu)/ \beta}}{\beta} e^{ -e^{-(x - \mu)/ \beta}},\]

где \(\mu\) — мода, параметр положения, а \(\beta\) — параметр масштаба.

Распределение Гумбеля (названо в честь немецкого математика Эмиля Юлиуса Гумбеля) было использовано на раннем этапе в гидрологии для моделирования наводнений. Оно также используется для моделирования максимальной скорости ветра и интенсивности осадков. Это «распределение с толстыми хвостами» — вероятность события в хвосте распределения больше, чем если бы использовалась гауссовская функция, отсюда и удивительно частое возникновение наводнений, которые случаются раз в 100 лет. Изначально наводнения моделировались как гауссовский процесс, что недооценивало частоту экстремальных событий.

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

Математическое ожидание функции равно \(\mu + 0.57721\beta\), а дисперсия равна \(\frac{\pi^2}{6}\beta^2\).

Ссылки

[1]

Гумбел, Е. Ю., «Статистика экстремумов», Нью-Йорк: Издательство Колумбийского университета, 1958 г.

[2]

Райсс, Р.-Д. и Томас, М., «Статистический анализ экстремальных значений из страхования, финансов, гидрологии и других областей», Базель: Издательство Birkhauser Verlag, 2001 г.

Примеры

Генерация выборок из распределения:

>>> rng = np.random.default_rng()
>>> mu, beta = 0, 0.1 # location and scale
>>> s = rng.gumbel(mu, beta, 1000)

Отображение гистограммы выборок вместе с функцией плотности вероятности:

>>> import matplotlib.pyplot as plt
>>> count, bins, _ = plt.hist(s, 30, density=True)
>>> plt.plot(bins, (1/beta)*np.exp(-(bins - mu)/beta)
...          * np.exp( -np.exp( -(bins - mu) /beta) ),
...          linewidth=2, color='r')
>>> plt.show()
../../../_images/numpy-random-Generator-gumbel-1_00_00.png

Демонстрация того, как экстремальное распределение может возникнуть из гауссовского процесса, и сравнение с гауссовским распределением:

>>> means = []
>>> maxima = []
>>> for i in range(0,1000) :
...    a = rng.normal(mu, beta, 1000)
...    means.append(a.mean())
...    maxima.append(a.max())
>>> count, bins, _ = plt.hist(maxima, 30, density=True)
>>> beta = np.std(maxima) * np.sqrt(6) / np.pi
>>> mu = np.mean(maxima) - 0.57721*beta
>>> plt.plot(bins, (1/beta)*np.exp(-(bins - mu)/beta)
...          * np.exp(-np.exp(-(bins - mu)/beta)),
...          linewidth=2, color='r')
>>> plt.plot(bins, 1/(beta * np.sqrt(2 * np.pi))
...          * np.exp(-(bins - mu)**2 / (2 * beta**2)),
...          linewidth=2, color='g')
>>> plt.show()
../../../_images/numpy-random-Generator-gumbel-1_01_00.png

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/random/generated/numpy.random.Generator.gumbel.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API