rv_continuous#
- класс scipy.stats.rv_continuous(momtype=1, a=None, b=None, xtol=1e-14, badvalue=None, имя=None, длинное имя=None, формы=None, seed=None)[источник]#
Универсальный класс непрерывной случайной величины, предназначенный для наследования.
rv_continuousявляется базовым классом для создания конкретных классов распределений и экземпляров для непрерывных случайных величин. Не может использоваться напрямую как распределение.- Параметры:
- momtypeint, необязательный
Тип расчёта обобщённого момента для использования: 0 для pdf, 1 (по умолчанию) для ppf.
- afloat, опционально
Нижняя граница носителя распределения, по умолчанию минус бесконечность.
- bfloat, опционально
Верхняя граница носителя распределения, по умолчанию плюс бесконечность.
- xtolfloat, опционально
Допуск для вычисления фиксированной точки для общей ppf.
- badvaluefloat, опционально
Значение в результирующих массивах, которое указывает на значение, для которого нарушено некоторое ограничение аргумента, по умолчанию np.nan.
- имяstr, optional
Имя экземпляра. Эта строка используется для создания стандартного примера для распределений.
- длинное имяstr, optional
Эта строка используется как часть первой строки документации, возвращаемой когда подкласс не имеет собственной документации. Примечание: длинное имя существует для обратной совместимости, не используйте для новых подклассов.
- формыstr, optional
Форма распределения. Например
"m, n"для распределения, которое принимает два целых числа в качестве двух параметров формы для всех его методов. Если не предоставлено, параметры формы будут выведены из сигнатуры приватных методов,_pdfи_cdfэкземпляра.- seed{None, int,
numpy.random.Generator,numpy.random.RandomState, опционально Если seed равно None (или np.random),
numpy.random.RandomStateиспользуется синглтон. Если seed является int, новыйRandomStateиспользуется экземпляр, инициализированный с seed. Если seed уже являетсяGeneratorилиRandomStateэкземпляр, тогда этот экземпляр используется.
- Атрибуты:
- a, bfloat, опционально
Нижняя/верхняя граница поддержки несдвинутого/немасштабированного распределения. Это значение не затрагивается loc и scale параметры. Чтобы вычислить носитель сдвинутого/масштабированного распределения, используйте
supportметод.
Методы
rvs(*args, **kwds)Случайные величины заданного типа.
pdf(x, *args, **kwds)Функция плотности вероятности в точке x для заданной случайной величины.
logpdf(x, *args, **kwds)Логарифм функции плотности вероятности в x для данного случайного распределения.
cdf(x, *args, **kwds)Функция кумулятивного распределения заданной случайной величины.
logcdf(x, *args, **kwds)Логарифм функции кумулятивного распределения в точке x для заданного случайного распределения.
sf(x, *args, **kwds)Функция выживания (1 -
cdf) в точке x заданного случайного распределения.logsf(x, *args, **kwds)Логарифм функции выживания данного случайного вектора.
ppf(q, *args, **kwds)Процентная точка функции (обратная
cdf) при q заданного случайного распределения.isf(q, *args, **kwds)Обратная функция выживания (обратная к
sf) при q заданного случайного распределения.moment(order, *args, **kwds)нецентральный момент распределения указанного порядка.
stats(*args, **kwds)Некоторые статистики заданного случайного вектора.
entropy(*args, **kwds)Дифференциальная энтропия случайной величины.
expect([func, args, loc, scale, lb, ub, ...])Вычислить математическое ожидание функции относительно распределения методом численного интегрирования.
median(*args, **kwds)Медиана распределения.
mean(*args, **kwds)Среднее распределения.
std(*args, **kwds)Стандартное отклонение распределения.
var(*args, **kwds)Дисперсия распределения.
interval(confidence, *args, **kwds)Доверительный интервал с равными площадями вокруг медианы.
__call__(*args, **kwds)Зафиксировать распределение для заданных аргументов.
fit(data, *args, **kwds)Вернуть оценки параметров формы (если применимо), местоположения и масштаба из данных.
fit_loc_scale(data, *args)Оценить параметры loc и scale из данных, используя 1-й и 2-й моменты.
nnlf(theta, x)Функция отрицательного логарифма правдоподобия.
support(*args, **kwargs)Носитель распределения.
Примечания
Публичные методы экземпляра класса распределения (например,
pdf,cdf) проверяют свои аргументы и передают валидные аргументы в приватные, вычислительные методы (_pdf,_cdf). Дляpdf(x),xявляется допустимым, если он находится в пределах носителя распределения. Допустимость параметра формы определяется_argcheckметод (который по умолчанию проверяет, что его аргументы строго положительны.)Создание подклассов
Новые случайные величины могут быть определены путем наследования от
rv_continuousкласс и переопределение как минимум_pdfили_cdfметод (нормализованный к положению 0 и масштабу 1).Если проверка положительного аргумента некорректна для вашего RV, то вам также потребуется переопределить
_argcheckметод.Для большинства распределений scipy.stats интервал поддержки не зависит от параметров формы.
xнахождение в интервале поддержки эквивалентноself.a <= x <= self.b. Если любая из конечных точек области определения зависит от параметров формы, то i) распределение должно реализовывать_get_supportметод; и ii) эти зависимые конечные точки должны быть опущены в вызове распределения кrv_continuousинициализатор.Правильно, но для оставшихся методов существуют потенциально медленные значения по умолчанию, однако для скорости и/или точности вы можете переопределить:
_logpdf, _cdf, _logcdf, _ppf, _rvs, _isf, _sf, _logsf
Метод по умолчанию
_rvsосновывается на обратной функции распределения,_ppf, применённое к равномерной случайной величине. Для эффективной генерации случайных величин используется либо значение по умолчанию_ppfнужно переопределить (например, если обратная функция распределения может быть выражена в явной форме) или метод выборки нужно реализовать в пользовательском_rvsметод.Если возможно, следует переопределить
_isf,_sfили_logsf. Основная причина — улучшение численной точности: например, функция выживания_sfвычисляется как1 - _cdfчто может привести к потере точности, если_cdf(x)близок к единице.Методы, которые могут быть переопределены подклассами
_rvs _pdf _cdf _sf _ppf _isf _stats _munp _entropy _argcheck _get_support
Существуют дополнительные (внутренние и приватные) общие методы, которые могут быть полезны для перекрестной проверки и отладки, но могут работать не во всех случаях при прямом вызове.
Примечание о
shapes: подклассам не нужно явно их указывать. В этом случае, формы будет автоматически выведена из сигнатур переопределенных методов (pdf,cdfи т.д.). Если по какой-то причине вы предпочитаете избегать использования интроспекции, вы можете указатьshapesявно в качестве аргумента конструктора экземпляра.Замороженные распределения
Обычно вы должны предоставить параметры формы (и, опционально, параметры местоположения и масштаба) при каждом вызове метода распределения.
Альтернативно, объект может быть вызван (как функция) для фиксации параметров формы, местоположения и масштаба, возвращая «замороженный» объект непрерывной случайной величины:
- rv = generic(
, loc=0, scale=1) rv_frozen объект с теми же методами, но с фиксированной заданной формой, местоположением и масштабом
Статистика
Статистики вычисляются с использованием численного интегрирования по умолчанию. Для скорости вы можете переопределить это с помощью
_stats:принимают параметры формы и возвращают mu, mu2, g1, g2
Если вы не можете вычислить один из них, верните его как None
Также может быть определен с помощью аргумента ключевого слова
moments, который представляет собой строку, состоящую из символов “m”, “v”, “s” и/или “k”. Только компоненты, указанные в строке, должны вычисляться и возвращаться в порядке “m”, “v”, “s” или “k”, с отсутствующими значениями, возвращаемыми как None.
В качестве альтернативы вы можете переопределить
_munpВозвращает оценки Марица-Джарретта стандартной ошибки выбранных экспериментальных квантилей данных.nи параметры формы и возвращает n-й нецентральный момент распределения.Глубокое копирование / Сериализация
Если распределение или замороженное распределение глубоко копируется (пиклируется/распиклируется, и т.д.), любой базовый генератор случайных чисел копируется вместе с ним. Следствием является то, что если распределение полагается на синглтон RandomState перед копированием, оно будет полагаться на копию этого случайного состояния после копирования, и
np.random.seedбольше не будет управлять состоянием.Примеры
Чтобы создать новое распределение Гаусса, мы сделаем следующее:
>>> from scipy.stats import rv_continuous >>> class gaussian_gen(rv_continuous): ... "Gaussian distribution" ... def _pdf(self, x): ... return np.exp(-x**2 / 2.) / np.sqrt(2.0 * np.pi) >>> gaussian = gaussian_gen(name='gaussian')
scipy.statsраспределения являются экземпляры, поэтому здесь мы создаем подклассrv_continuousи создать экземпляр. Теперь у нас есть полностью функциональное распределение со всеми соответствующими методами, автоматически сгенерированными фреймворком.Обратите внимание, что выше мы определили стандартное нормальное распределение с нулевым средним и единичной дисперсией. Сдвиг и масштабирование распределения можно выполнить с помощью
locиscale#19341gaussian.pdf(x, loc, scale)по сути вычисляетy = (x - loc) / scaleиgaussian._pdf(y) / scale.