~~ MCMC devrait être fait! Il n’existe pas de Tsukkomi.
Comme vous le savez, scipy dispose de nombreuses fonctions de densité de probabilité prédéfinies que vous pouvez utiliser pour facilement échantillonner, tracer des fonctions de densité de probabilité, etc.
Par exemple
stats.norm.rvs(loc=50, scale=20, size=1000)
Si tel est le cas, 1000 échantillons peuvent être obtenus à partir d'une distribution normale avec une moyenne de 50 et un écart type de 20.
x = np.linspace(0, 100, 100)
px = stats.norm.pdf(x, loc=50, scale=20)
plt.plot(x, px)
Ensuite, vous pouvez également illustrer la distribution normale avec $ 0 <x <100 $.
Alors, comment échantillonner à partir de votre propre fonction de densité de probabilité qui n'est pas prédéfinie dans scipy? Dans le cas de la distribution discrète, elle est introduite dans Article par @ yk-tanigawa, donc ici nous traiterons le cas de la distribution continue.
À titre d'exemple, en supposant que la distribution normale n'est pas définie dans scipy.stats (elle est en fait définie), voici un exemple de définition et d'échantillonnage. Il vous suffit d'écrire la fonction que vous souhaitez définir dans la fonction _pdf, héritant de rv_continous.
from scipy import stats
import math
class gaussian(stats.rv_continuous):
def _pdf(self, x, mu, sigma):
normalize_factor = 1.0/(2.0*math.pi*sigma**2)**(1/2)
px = normalize_factor * math.exp(-(x-mu)**2/(2*sigma**2))
return px
gaussian = gaussian(name="gaussian", a=0.0)
sample_from_gaussian = gaussian.rvs(size=1, mu=10.0, sigma=1.0)
Veuillez noter que la fonction de densité de probabilité que vous définissez vous-même doit être normalisée. Si vous ne l'avez pas standardisé, vous pouvez utiliser Échantillonnage de rejet.
(Cependant, même si vous regardez Documentation, il y a de nombreuses raisons pour lesquelles a = 0 est nécessaire. Je ne sais pas ...)
Recommended Posts