0
votes

Comment itérer une équation dans une fonction Python, en utilisant le résultat précédent pour chaque itération

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: xxx

ceci est l'impression i get xxx < p> Qu'est-ce que j'aimerais plutôt 10 probabilités différentes, où le "préalable" est remplacé à chaque fois par "probabilité" de calcul précédent ou 'pdgp' ...

orientation sur ce qui me manque ?


1 commentaires

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


3 Réponses :


0
votes

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.

Où pensez-vous que vous disiez Python que vous utilisez le résultat précédent dans le calcul suivant?

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): xxx

vous Peut également consulter s'il existe une formule fermée pour une nième mise à jour bayésienne itératée.


0 commentaires

0
votes

Eh bien, ce que vous voulez, c'est la valeur précédente de 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: xxx pré>

(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 = code> est une instruction à l'ordinateur pour faire une nouvelle valeur qu'elle em> attribue au côté gauche. P>

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> xxx pré>

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>

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))


0 commentaires

0
votes

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: xxx


0 commentaires