Хобрук: Ваш путь к мастерству в программировании

Динамически создавать дистрибутив scipy.stats из методов другого класса

Я создал класс, который представляет собой статистическое моделирование. Одним из аспектов этого является распределение p-значений, и класс содержит методы, характеризующие это распределение:

class Simulation:
    ...
    def pdf_p(self, p):
        ...
    def cdf_p(self, p):
        ...
    def ppf_p(self, P):
        ...
    def rvs_p(self, size):
        ...

Теперь я хотел бы представить этот дистрибутив также как объект дистрибутива в стиле scipy.stats. Для этого метод __init__ моего класса содержит оператор

self.p = PValueDist(self.pdf_p, self.cdf_p, self.ppf_p, self.rvs_p)

где класс PValueDist определяется как

from scipy.stats import rv_continuous

class PValueDist (rv_continuous):
    def __init__(self, pdf, cdf, ppf, rvs):
        self._pdf = pdf
        self._cdf = cdf
        self._ppf = ppf
        self._rvs = rvs
        super().__init__(self)

Кажется, это работает, но мне интересно, является ли это правильным или каноническим способом сделать это?

Конечно, я мог бы также сделать Simulation подклассом rv_continuous и переименовать свои методы. Однако симуляция включает в себя несколько разных распределений, и отождествление симуляции с одним из них не кажется семантически правильным.

17.01.2021

Ответы:


1

Кажется, все в порядке. Несколько вещей, на которые следует обратить внимание: 1) дистрибутивы scipy.stats являются экземплярами, поэтому не забудьте создать их, 2) если поддержка не по умолчанию ((0, inf) IIRC), установите их в __init__ .

17.01.2021
  • 1) Я создал экземпляр, как показано в вопросе. Или я что-то неправильно понимаю? 2) Я думал это дефолтная поддержка параметров, а не самого РВ? В любом случае, это p-значения, поэтому поддержка [0, 1]. 19.01.2021
  • Под поддержкой я подразумеваю поддержку дистрибутива, [a, b], где, скажем, pdf(x) принимает x\in [a, b]. Если это [0, 1], то вы хотите super().__init__(self, a=0, b=1) и определите _argcheck 19.01.2021
  • Является ли параметр формы действительным, определяется методом _argcheck (который по умолчанию проверяет, что его аргументы строго положительны). — Мое распределение не имеет числовых параметров, оно представляет собой конкретное фиксированное распределение, определенное скопированными методами, поэтому AFAICS _argcheck не применяется. 21.01.2021
  • Но вы, кажется, правы насчет a=0, b=1. 21.01.2021
  • Поскольку у меня нет параметров, мне интересно, должен ли я наследовать от rv_frozen? 21.01.2021
  • Наследование от rv_frozen вряд ли принесет много пользы. Просто наследуйте от rv_coutinuous 22.01.2021
  • Новые материалы

    5 проектов на Python, которые нужно создать прямо сейчас!
    Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..