После этого поста я попытался создать ненормальный дистрибутив lo git, создав класс LogitNormal
:
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import logit
from scipy.stats import norm, rv_continuous
class LogitNormal(rv_continuous):
def _pdf(self, x, **kwargs):
return norm.pdf(logit(x), **kwargs)/(x*(1-x))
class OtherLogitNormal:
def pdf(self, x, **kwargs):
return norm.pdf(logit(x), **kwargs)/(x*(1-x))
fig, ax = plt.subplots()
values = np.linspace(10e-10, 1-10e-10, 1000)
sigma, mu = 1.78, 0
ax.plot(
values, LogitNormal().pdf(values, loc=mu, scale=sigma), label='subclassed'
)
ax.plot(
values, OtherLogitNormal().pdf(values, loc=mu, scale=sigma),
label='not subclassed'
)
ax.legend()
fig.show()
Однако класс LogitNormal
делает не дает желаемых результатов. Когда я не делаю подкласс rv_continuous
, это работает. Это почему? Мне нужен подкласс для работы, потому что мне также нужны другие методы, которые идут с ним, как rvs
.
Кстати, единственная причина, по которой я создаю свой собственный lo git -нормальный дистрибутив в Python, заключается в том, что единственные реализации этого дистрибутива, которые я смог найти, были из PyMC3 пакета и из пакета TensorFlow , оба из которых довольно тяжелые / избыточные, если они нужны только для этой одной функции. Я уже пробовал PyMC3
, но, видимо, с * 1017 это не очень хорошо. Я думаю, он всегда падал для меня. Но это совсем другая история.