Dieser Eintrag stammt aus CodeIQs Lernen Sie durch Programmieren mit Ayaka Ikezawa! Mathematikkurs für maschinelles Lernen [Wahrscheinlichkeitsverteilung] Ich konnte den Code im Artikel über die Wahrscheinlichkeitsverteilung von Würfeln in der zweiten Hälfte nicht verstehen. Es ist also eine Erinnerung, als ich den Code erstellt habe, soweit ich verstehen kann.
Da Python ein Anfänger ist, kann es einige seltsame Schreibstile geben.
Python 2.7.10
Q. Ermitteln Sie die Wahrscheinlichkeitsverteilung, wie oft die Würfel fünfmal geworfen werden. Die Wahrscheinlichkeitsverteilung ist eine Liste von Wahrscheinlichkeiten.
Die Formel für die Wahrscheinlichkeitsverteilung von Würfeln ist die obige Formel. Die offizielle Erklärung und Wahrscheinlichkeitsverteilung sind im Artikel ausführlich beschrieben, daher werde ich hier die Informationen schreiben, die zur Erstellung des Codes erforderlich sind.
N → Da es sich um die Anzahl der Versuche handelt, besteht die Aufgabe darin, "5 Mal zu würfeln", also N = 5
N! → 5. Stock. Verwenden Sie die Fakultätsmethode der Mathematikbibliothek
k1 k2 k3 k4 k5 k6 → Wenn Sie die Würfel N-mal werfen, wird die Kombination aus der Häufigkeit, mit der jeder Würfel gewürfelt wird, berechnet Zum Beispiel, wenn Sie es 5 Mal werfen
Wenn 1 alle 5 Male gegeben wird, ist k1 = 5 k2 = 0 k3 = 0 k4 = 0 k5 = 0 k6 = 0 Wenn alle bis auf 6 von 5 einmal erscheinen, ist k1 = 1 k2 = 1 k3 = 1 k4 = 1 k5 = 1 k6 = 0
Es wird sein. In der Wahrscheinlichkeitsverteilung finden wir die Wahrscheinlichkeit für jede Kombination (Verständnis).
Finden Sie zuerst die Kombination der Ergebnisse heraus, wenn Sie die Würfel 5 Mal werfen.
Wenn k1 = 5 k2 = 0 k3 = 0 k4 = 0 k5 = 0 k6 = 0 Wenn k1 = 4 k2 = 1 k3 = 0 k4 = 0 k5 = 0 k6 = 0 Wenn k1 = 4 k2 = 0 k3 = 1 k4 = 0 k5 = 0 k6 = 0 ,,,
Da es schwierig ist, den Code unter Berücksichtigung zu schreiben, werde ich alle Kombinationen von k1 bis k6 ausgeben, sobald alle kX 0 bis 5 sind
Zum Beispiel so
#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
Alle Kombinationen werden mit der rekursiven Funktion (create_pattern (k, list)) im folgenden Code erstellt. Danach werden nur die Kombinationen, bei denen die Summe von k1 bis k6 5 ist, und die Wahrscheinlichkeit gemäß der Formel berechnet.
python
#!/usr/bin/env python
import math
#Machen Sie alle Kombinationen mit rekursiven Funktionen
#Bilden Sie eine Kombination von Bindestrichtrennzeichen
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)
#Häufigkeit, mit der ein Würfel geworfen wird
n = 5
all_pattern_str_list = create_pattern(1, [])
#Teilen Sie die durch Bindestriche getrennten Kombinationen auf und berechnen Sie die Wahrscheinlichkeit nur für Kombinationen mit insgesamt 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
#Offizieller Nenner(k1!k2!k3!k4!k5!k6!)Berechnung
denom = 1
for p in pattern_list:
denom = denom * math.factorial(p)
#Berechnung der Wahrscheinlichkeit
print (math.factorial(n) / denom) * (1.0 / 6.0 ** n)
Wie Sie im Artikel sehen können, hat das Ablegen im Code das Verständnis der Mathematik erleichtert.
Recommended Posts