Je veux échantillonner à partir de la fonction gamma inverse en Python, mais elle est implémentée dans scipy invgamma [ ^ 1] a été conçu pour que l'un des paramètres ne puisse pas être altéré (le paramètre β de la fonction qui apparaît dans la section suivante est fixé à β = 1: si quelqu'un connaît la raison, merci de me le faire savoir). Je l'ai fait après l'entraînement (à la fois en postant sur python et Qiita) (y compris le mémorandum).
La fonction gamma inverse est une distribution de probabilité continue exprimée sous la forme suivante.
f(x,α,β) = \frac{β^α}{Γ(α)}x^{-α-1}e^{\frac{-β}{x}} (x>0)\\
(Cependant, Γ(α) = \int_{0}^{∞}x^{α-1}e^{-x}Fonction gamma représentée par dx)
Je ne sais pas pourquoi l'invgamma de scipy est fixé à β = 1 (je ne sais pas grand chose d'autre que mon propre domaine ...), mais j'utilise MCMC (Markov Chain Monte Carlo Method) pour pré-distribuer la distribution de la distribution normale. J'ai écrit cet article cette fois parce que je veux utiliser autre chose que β = 1 lors de son utilisation. Si vous voulez en savoir plus sur MCMC, veuillez consulter l '[article] de @ pynomi (https://qiita.com/pynomi/items/75ac937fc4ed0b39e3d5) [^ 2].
from scipy import stats
from scipy.special import gamma
import numpy as np
###Fonction de densité de probabilité de la distribution gamma inverse###
class invgamma(stats.rv_continuous):
def _pdf(self, x,alpha,beta):
px = (beta**alpha)/gamma(alpha)*x**(-alpha-1)*np.exp(-beta/x)
return px
###Échantillonnage à partir de la fonction gamma inverse###
invgamma = invgamma(name="invgamma", a=0.0)
sample_from_invgamma = invgamma.rvs(size=1, alpha = 1, beta = 1.0)
Comme ça. (OS: Windows10, Python3.7, Environnement de développement: Opération confirmée avec Spyder, lorsque le nombre aléatoire est fixé avec β = 1, la valeur d'échantillonnage correspond à l'invgamma de scipy, donc je pense que c'est probablement correct.)
En écrivant cet article et ce code, j'ai également fait référence à l '[article] de @ physics303 (https://qiita.com/physics303/items/93626d32dd1d17388610) [^ 3]. Merci beaucoup.
Recommended Posts