Cette entrée est de CodeIQ's Apprenez en programmant avec Ayaka Ikezawa! Cours de mathématiques pour l'apprentissage automatique [Distribution de probabilité] Je n'ai pas pu comprendre le code de l'article sur la distribution de probabilité des dés dans la seconde moitié. Donc, c'est un rappel quand j'ai fait le code pour autant que je puisse comprendre.
Puisque python est un débutant, il peut y avoir des styles d'écriture étranges.
Python 2.7.10
Q. Trouvez la distribution de probabilité du nombre de fois où les dés sont lancés 5 fois. La distribution de probabilité est une liste de probabilités.
La formule de la distribution de probabilité des dés est la formule ci-dessus. L'explication officielle et la distribution de probabilité sont décrites en détail dans l'article, alors j'écrirai ici les informations nécessaires pour créer le code.
N → Puisqu'il s'agit du nombre d'essais, la tâche est de "lancer les dés 5 fois", donc N = 5
N! → 5ème étage. Utilisez la méthode factorielle de la bibliothèque mathématique
k1 k2 k3 k4 k5 k6 → Lorsque vous lancez les dés N fois, la combinaison du nombre de lancers de chaque dé Par exemple, si vous le lancez 5 fois
Si 1 est donné toutes les 5 fois, k1 = 5 k2 = 0 k3 = 0 k4 = 0 k5 = 0 k6 = 0 Si tous sauf 6 sur 5 apparaissent une fois, k1 = 1 k2 = 1 k3 = 1 k4 = 1 k5 = 1 k6 = 0
Ce sera. Dans la distribution de probabilité, nous trouverons la probabilité pour chaque combinaison (compréhension).
Tout d'abord, découvrez la combinaison des résultats lorsque vous lancez les dés 5 fois.
Lorsque k1 = 5 k2 = 0 k3 = 0 k4 = 0 k5 = 0 k6 = 0 Lorsque k1 = 4 k2 = 1 k3 = 0 k4 = 0 k5 = 0 k6 = 0 Lorsque k1 = 4 k2 = 0 k3 = 1 k4 = 0 k5 = 0 k6 = 0 ,,,
Puisqu'il est difficile d'écrire le code compte tenu, je vais afficher toutes les combinaisons de k1 à k6 une fois que kX est tout de 0 à 5
Par exemple, comme ça
#k1-k2-k3-k4-k5-k6
0-0-0-0-0-5
0-0-0-0-1-4
0-0-0-0-2-3
...
5-5-5-5-5-3
5-5-5-5-5-4
5-5-5-5-5-5
Toutes les combinaisons sont créées avec la fonction récursive (create_pattern (k, list)) dans le code ci-dessous. Après cela, seules les combinaisons pour lesquelles le total de k1 à k6 est de 5, et la probabilité est calculée selon la formule.
python
#!/usr/bin/env python
import math
#Faire toutes les combinaisons avec des fonctions récursives
#Faire une combinaison de séparateurs de tirets
def create_pattern(k, list):
if k == 1:
for i in xrange(0, 6):
list.append(str(i))
else:
new_list = []
for pattern in list:
for j in xrange(0, 6):
new_list.append(pattern + '-' + str(j))
list = new_list
if k == 6:
return list
else:
k = k + 1
return create_pattern(k, list)
#Nombre de fois pour lancer un dé
n = 5
all_pattern_str_list = create_pattern(1, [])
#Décomposez les combinaisons séparées par des tirets et calculez la probabilité uniquement pour les combinaisons avec un total de 5.
for all_pattern_str in all_pattern_str_list:
tmp_list = all_pattern_str.split('-')
pattern_sum = 0
pattern_list = []
for tmp_str in tmp_list:
pattern_list.append(int(tmp_str))
if sum(pattern_list) == 5:
print pattern_list
#Dénominateur officiel(k1!k2!k3!k4!k5!k6!)Calculer
denom = 1
for p in pattern_list:
denom = denom * math.factorial(p)
#Calcul de la probabilité
print (math.factorial(n) / denom) * (1.0 / 6.0 ** n)
Comme vous pouvez le voir dans l'article, le déposer dans le code a facilité la compréhension des mathématiques.
Recommended Posts