J'essaie de faire fonctionner une fonction pour calculer les probabilités bayésiennes à Python sans utiliser Scipy, et alors que je peux obtenir la fonction d'imprimer un seul résultat, j'ai du mal à l'obtenir à plusieurs fois, en utilisant le résultat précédent. Dans le prochain calcul.
Voici ce que j'ai jusqu'à présent: p> ceci est l'impression i get p> orientation sur ce qui me manque ? p> p>
3 Réponses :
Je ne suis pas un fan du dicton "La folie fait la même chose encore et encore et s'attendant à des résultats différents", mais même si ce n'est pas la folie, c'est une mauvaise programmation. Rien ne change d'une itération de votre boucle à l'autre, alors pourquoi vous attendez-vous à des sorties différentes?
en utilisant le résultat précédent dans le calcul suivant. p> BlockQuote>
Où pensez-vous que vous disiez Python que vous utilisez le résultat précédent dans le calcul suivant? P>
Si vous souhaitez que la sortie de l'itération soit entrée pour la prochaine, vous devez avoir quelque chose qui attribue à quelque chose à quelque chose. Par exemple (aucune garantie que c'est le code correct pour ce que vous voulez, juste un exemple de la sortie d'une itération utilisée comme entrée dans le suivant): p>
xxx pré> vous Peut également consulter s'il existe une formule fermée pour une nième mise à jour bayésienne itératée. p> p>
Eh bien, ce que vous voulez, c'est la valeur précédente de (ceci suppose que la formule que vous fournissez est réellement correcte!) p> Notez que le PDGP code> sur le côté gauche de l'équation est différent em> à partir de celui situé à droite - c'est pourquoi cela fonctionne. Le côté droit d'une expression avec En réalité, il peut être simplifié un peu plus loin - la longue équation de la deuxième ligne est fondamentalement identique à celle de l'équation que celle à l'intérieur du loo - sauf le préalable est remplacée par la postérieure. Donc, vous pouvez plutôt faire: p> Ceci utilise un principe appelé "Ne pas répéter toi-même" ou "sec" - de cette façon, la formule principale n'apparaît qu'une seule fois. p> Notez également que votre fonction ne retourne em> rien. Vous voudrez peut-être stocker les valeurs dans une liste comme elles sont créées et renvoyez que: P> probabilité code> pour devenir la valeur suivante de
probabilité code>, la chose la plus facile est de simplement se débarrasser de cette variable entièrement et Il suffit d'utiliser
pdgp code> tout au long, comme dans:
= code> est une instruction à l'ordinateur pour faire une nouvelle valeur qu'elle em> attribue au côté gauche. P>
def prob_given_positive (prior, false_positive_rate, true_positive_rate):
result = [] ##Â empty list
pdgp = prior
for i in range(10+1):
pdgp = (true_positive_rate * pdgp) / (false_positive_rate)
result.append(pdgp)
return(result)
print(prob_given_positive(0.001, 0.08, 1))
Je suis d'accord avec les réponses, mais je ne suis pas sûr de ce que le facteur "variable" est ici pour obtenir en permanence de nouvelles probabilités basées sur un précédent "préalable" possible, c'est ce que je pense.
C'est un peu ambigu, mais disons votre "faux positive_rate" et "vrai_positive_rate" sont cohérents et variable changements sont "Prix", vous pouvez faire quelque chose comme ça, BTW Je pense que les autres réponses font un excellent travail et il y a probablement Beaucoup d'autres façons de faire cela: p>
Vous déclarez une variable I dans votre boucle pour la boucle, mais ne l'utilisez jamais dans le corps. Et aucune des autres variables n'est modifiée lors d'une itération afin que la sortie reste la même