Dans cet article,J'étendrai l'exemple d'extrapolation des probabilités à partir des données,Consideration 0 Et 1Tout entre(Continu)Valeur,Au lieu de considérer un ensemble discret de probabilités candidates.Cela signifie que notre transcendance(Et a posteriori)Maintenant c'est un probability density function (pdf) Au lieu de probability mass function (pmf).
J'ai envisagé d'extrapoler à partir de séries de données p0,Probabilité zéro:
- moi.Utiliser p0Différents a prioriRésoudre le même problème,LeAutorisation préalable 0 Et 1 Valeurs continues entre au lieu d'un ensemble discret de valeurs candidates.
Le point de départ de notre raisonnement est Probabilité ——Probabilité des séries de données observées,Écris comme si je savais p0 Même valeur:
Par souci de clarté,On peut insérer p0=0.6,Et trouver la probabilité d'une séquence de données spécifiée avec une valeur de probabilité inconnue:
Une forme plus générale de probabilité ,N'est pas spécifique à la séquence de données considérée,- Oui.
Parmi eux n0 Est une quantité nulle,n1 Est toute séquence de données considérée D Dans 1 Nombre de.
Nous utilisons la distribution bêta pour représenter notre hypothèse a priori/Information.Sa forme mathématique est
Parmi eux α0 Et α1 C'est un super paramètre que nous devons définir,Reflète notre avis sur p0 Hypothèses de valeur/Information.Mais,Il suffit de mettrep0 Considérez les paramètres que nous voulons déduire——Ignorer le paramètre est une probabilité.
Votre attention, s'il vous plaît. A posteriori pdf Et ce sera Beta Distribution,Il vaut donc la peine de s'adapter pdf.
Moyenne a priori—— La plupart des gens veulent une estimation numérique ou ponctuelle pour représenter les résultats du raisonnement ou l'information contenue a priori.Et pourtant,Dans le raisonnement bayésien,A priori et a posteriori sont pdf Ou pmf.Une façon d'obtenir une estimation ponctuelle est de prendre Les paramètres pertinents sont relatifs à a priori ou a posteriori Moyenne.Par exemple,Pour Beta A priori, nous obtenons:
pdf Normalisé—— Ça veut dire que si on allait p0 De 0 Intégrale à 1,On en aura un.:
Parce que les relations suivantes:
En ce qui nous concerne,Le message le plus important b In 0 À 1 Normalisation par intervalles,C'est pour p0 Une telle probabilité est nécessaire.
Les hypothèses et informations préalables peuvent être reflétées en définissant des hyperparamètres--Hyperparamètreα0α0Etα1α1ImpactpdfLa forme de,Rendre le codage des informations a priori plus flexible.
Par exemple,Utiliserα0=1, α1=1 Non reflétép0 Valeur préférée pour.C'estpdfOn dirait.
Un autre a priori peut être spécifié α0=5, α1=5,C'est plus proche. p0=1/2 Valeurs proches
Enfin,Nous pouvons utiliserα0≠α1Obtenir un a priori asymétrique,Je vois.α0=2,α1=8.
Quelques choses à garder à l'esprit lors du réglage des hyperparamètres:
Fonction de distribution cumulative (cdf) betaFonction de distribution cumulative (cdf)Calculons. p0 Inférieur ou égal à la valeur x La probabilité de.Plus précisément,,cdfDéfini comme suit::
L'intégrale est également appelée incomplèteBeta ingIntégrale,Et exprimé comme suit:Ix(α0,α1).
Si on veut savoirp0En nombrexlEtxhProbabilité entre,Nous pouvons utilisercdfPour calculer.
Pas tout à fait. Beta Intégrale ou cdf Et son intégrale inverse permet de calculer l'intervalle de confiance a priori ou a posteriori.Utiliser ces outils,Pour ainsi direp0 Les valeurs de 95% La probabilité de——Encore une fois,Nous utiliserons Python Le Code le dessine ci - dessous.
La distribution bêta est un a priori conjugué pour ce problème--Cela signifie que a posteriori aura la même forme mathématique que a priori(C'est aussi une distribution bêta),Et mis à jour les hyperparamètres.C'est mathématiquement "Résonance "C'est vraiment bien,On n'a pas besoin de ça.MCMCPour faire une Inférence bayésienne complète.
Maintenant, parlons du théorème bayésien et de l'a posteriori de ce problèmepdf.
Notre objectif ultime est une fonction de densité de probabilité postérieure,Combinaison de la probabilité et de la transcendance,Après avoir pris en compte les données, nous avons eu un impact surp0Pour mettre à jour les connaissances.A posterioripdfSous la forme(Dans ce cas,).
En d'autres termes,,C'est Données donnéesSéquence D Et a priori p0 Densité de probabilité,Par le (α0,α1)De Beta pdf Réflexion.
Dans ce cas,,Le théorème bayésien prend la forme suivante:
Dont a posteriori P(p0|D,α0,α1) Bleu,Probabilité P(D|p0)Noir,A priori P(p0| α0,α1)C'est rouge.Votre attention, s'il vous plaît.,Normalisation Probabilité marginale (Dénominateur dans l'équation ci - dessus)Maintenant c'est une intégrale.
Essayez de considérer le théorème bayésien comme une question de p0 De Hypothèses (α0,α1) Mise à jour vers Hypothèses + Données (D,α0,α1) Informations sur:
Essayez de considérer le théorème bayésien comme une question dep0L'information est dérivée de l'hypothèse(α0,α1)Mise à jour des hypothèses+Données(D,α0,α1).
Pour obtenir un post - testpdf,Nous devons faire une intégrale sur le dénominateur du théorème bayésien.Dans ce cas,,En utilisant les propriétés de la distribution bêta,Pour pouvoir calculer.L'intégrale est la suivante:.
L'intégrale de la dernière ligne définit une fonction bêta,Comme nous l'avons vu dans la section sur a priori,Et il y a un résultat connu.
Cela signifie que le dénominateur,Aussi appelé marginalProbabilité,égal à.
Encore une fois,On a eu ce résultat parce queBeta La distribution est un a priori conjugué des probabilités du processus Bernoulli que nous considérons .Votre attention, s'il vous plaît.,L'hyperparamètre de a priori a été mis à jour par les données de comptage.
C'est exactement ce qu'on attendait,Pas besoin de faire tous les calculs mathématiques.Dans tous les cas,En servicePythonAvant d'y arriver,Quelques considérations.
Tout d'abord,,Nous importons des paquets,Utilisez ces paquets pour calculer et dessiner a priori、Somme de probabilité a posteriori.En outre,Utiliser matplotlib,Dans ce cas, ggplot,Créer de belles images.
Probabilité
def _int(sef, daa):
""Probabilité de données binaires.""
elfus = {s:0 for s in ['0', '1']}
def proes_data(sef, ata):
""Traitement des données.""
for s in ['0', '1']:
unts[s] =cont(s)
""Probabilité de traitement.""
n0 = couts['0']
n1 = couts['1']
if p0 != 0 and p0 != 1:
# Situation typique
lgpdaa = n0*log(p0) + \
n1*log(1.-p0)
rdta = exp(lgpata)
elif p0 == 0 and n0 != 0:
# Sin0Non, pas du tout.0,p0C'est impossible.0
lpr_dta = -np.inf
p_dta = exp(lgrata)
elif p0 == 0 and n0 == 0:
# Données etp0=0D'accord.
lgpr_at = n1*np.log(1.-p0)
p_ata =.exp(lo_dta)
elif p0 == 1 and n1 != 0:
# Sin1Non, pas du tout.0,p0C'est impossible.1
lpdta = -inf
praa = exp(lor_ta)
elif p0 == 1 and n1 == 0:
# Données etp0=1D'accord.
log_dta = n0*log(p0)
def prob(sef, p0):
""Probabilité d'acquisition des données."""
prdat,_ = ._procs_proabiti(p0)
def logprob(sef, p0):
""Logarithme de probabilité pour obtenir des données."""
_, lgpr_a = sel_presplies(p0)
Distribution a priori
Notre classe transcendantale est essentiellement autour de scipyLe sac de,Il y a une méthode de dessin.Attention! plot() La méthode a Beta Moyenne des distributions,Et utiliser interval() La méthode donne une probabilité de 95% Région--Ceci est incomplet Beta L'intégrale et sa valeur inverse, dont il est question ci - dessus, sont complétées par.
def _int_(sef, alpa0=1, alph1=1):
""Données binairesβA priori.""
elfa0 = alha0
sl.1 = alha1
slf.0r = ba(self.0, sef.a1)
def intrval(slf, pb):
""Contient`prob'DepdfFin de la zone.
Par exemple:interval(0.95)
"""
return sef.pvitervl(rob)
def mean(self):
"""Renvoie la moyenne a priori."""
def pdf(self, p0):
"""p0Densité de probabilité à."""
return self.p.pdf(p0)
def plot(self):
""Afficher les moyennes et95%Graphique des intervalles de confiance.""
fig, ax = tsuplots(1, 1)
x = np.rae(0., 1., 0.01)
# Obtenir la moyenne a priori p0
mean = mean()
# Obtenir l'inclusion95%Faible probabilité/Plus haut.
low_p0, high_p0 = l.nterval(.95)
xo =nang(_0, hih_p0, 0.01)
# Dessinerpdf
ax.plot(x, self.pdf(x), 'r-')
# Remplissage95%Région
between(x_prob 0, sel.pdf(x_pob)
# Moyenne
ax.stem([mean], [sf.df(mea)
Utilisons le nouveau Code pour dessiner quelques Beta pdf.
A priori uniformeLes lignes verticales avec des points montrent pdf Position de la moyenne.Les zones ombragées représentent pour un α0 Et α1 Valeur,La probabilité est 95% De(Symétrie)Région.Si vous voulez des moyennes et des valeurs réelles des intervalles de confiance,Vous pouvez également obtenir ces valeurs:
print("Moyenne a priori: {}".format(pri.mean()))
D'autres exemples précédents ci - dessus sont également valables:
prior(5, 5)
plot()
Et
por(2, 8)
iplot()
Il est utile de comprendre la moyenne et l'incertitude des hypothèses antérieures reflétées par les hyperparamètres.
A posterioriEnfin,Nous construisons des classes a posteriori.Comme vous vous y attendiez.,Je prends les données et a priori comme paramètres,Et extraire les paramètres nécessaires a posteriori de ces éléments.
def __int_(sf datprior):
""A posteriori.
data: Une liste d'échantillons de données
A priori:βUn exemple de classe a priori
"""
elflilihod = liliod(dta)
sefprir = rio
self._css_steror()
def _pces_posteror(slf):
""Utiliser les données transmises et a priori pour traiter a posteriori.""
# Extrait de la probabilité et a priorin0, n1, a0, a1
seln = slfliklihod.counts['0']
sel.n1 = elf.lkelihodcnts['1']
lfa0 = sf.prir.0
self.a = sef.priora
el0rv= beta(selfa0 + sfn0,
sef.a1 + slf.1)
def interalself, prob):
""Y compris`prob`DepdfFin de la zone.
Par exemple:interval(0.95)
"""
def mean(sef):
"""Retour à la moyenne a posteriori."""
def pdf(sef, p0):
"""p0Densité de probabilité à."""
def plot(slf):
""Afficher a priori、Graphique de la somme de vraisemblance a posteriori.""
## A priori
# Obtenir la moyenne a priori p0
pri_mean =eorman()
#Inclus95%Faible probabilité/Score élevé
plo_p0,= interval(0.95)
prob = arange(low_p0, i_hgh_0, 0.01)
# Dessinerpdf
plot(prior.pdf(x)
# Remplissage95%Région
x.ll_between(pri_p )
# Moyenne
astm([pri_mean])
## Probabilité
# Cartographie des probabilités
li = [sel.likliood.pro]
# ##A posteriori
#Obtenir la moyenne a posteriorip0
ostmen = mean()
#Inclus95%Faible probabilité/Plus haut.
ow_p0, _high_p0 = interval(0.95)
prob = np.rngest_low_p0po_highp0 0.01)
# Dessinerpdf
plot(x, slf.pd(x)
# Remplissage95%Région
fil_etween(pos_xob, 0,self.df(pt_pr )
# Moyenne
ax2].t_mean])
C'est le Code de base,Allons - y.Prenez quelques exemples.
Commençons par les données et les exemples d'a priori uniforme.
# Données
data1 = [0,0,0,0,1,1,0,0,0,1]
# A priori
pro1 = prir(1, 1)
# A posteriori
ot1 = psteior(daa1, ior1)
plot()
Attention ici:
Et puis...,Considérons les mêmes données avec un a priori non uniforme.La longueur de l'ensemble de données est 10,Donc, n0+n1=10.Utilisons α0+α1=10 ,Définir a priori,Mais a priori atteint un pic à un endroit différent de la probabilité(Peut - être que certains experts disent que c'est censé être un réglage a priori):
# A priori
prir(4, 6)
# A posteriori
ps2 = postior(da1, pio2)
plot()
Il est clair que les données et les experts divergent sur ce point.Et pourtant,Parce que le poids a priori est fixé à 10 Et la longueur de la séquence de données est 10,Donc le pic a posteriori est au milieu du PIC a priori et du pic de probabilité.Essayez d'utiliser cet effet pour mieux comprendre les superparamètres a priori、Interaction entre la longueur de l'ensemble de données et les résultats a posteriori.
Comme dernier exemple,Nous considérons deux variantes du dernier exemple, Tout d'abord, nous utilisons l'a priori unifié:
# Définir la probabilité à0
p0 = 0.2
#ParamètresrngLes graines sont2
n.rand.sed(2)
# Produire des données
dta2 =rando.i([0,1], 500, p=[p0, 1.-p0])
# A priori
prior(1,1)
# A posteriori
poteir(daa2, pio3)
Votre attention, s'il vous plaît.,La probabilité et le pic a posteriori sont au même endroit,Comme nous nous y attendions.Mais,Parce que l'ensemble de données est long(500 Valeurs),Le pic est beaucoup plus fort.
Enfin,Nous utilisons le même ensemble de données“Erreur a priori”.Dans ce cas,,Nous maintiendrons la Force a priori à 10,C'est - à - dire: α0+α1=10:
# A priori
prior(6,4)
# A posteriori
poseor(data, pior4)
Votre attention, s'il vous plaît.,Bien que le pic ait été atteint a priori au mauvais endroit, Mais la probabilité est très similaire à a posteriori .Cet exemple montre,Si l'a priori n'est pas trop fort,Une quantité raisonnable de données devrait produire un bon raisonnement.En général,Mieux vaut laisser n0+n1>α0+α1 Et compte tenu de la forme a priori et a posteriori.