Versuchen Sie, die stochastische Massenfunktion der Binomialverteilung in Python zu transkribieren

Ich interessiere mich für Mathematik und Statistik, aber wenn ich mir mathematische Formeln anschaue, gibt es zu viele Symbole, um zu sagen, welches welches ist, oder ich vergesse es sofort, also habe ich beschlossen, das zu schreiben, was ich im Programm gelernt habe. Hat.

Dieses Mal erstellen wir eine Klasse mit den folgenden Funktionen für eine Binomialverteilung mit insgesamt n Versuchen und einer Erfolgswahrscheinlichkeit von p.

Die Leistung wird nicht berücksichtigt, da sie den Inhalt des Ausdrucks speichern soll.

Die Formel, die diesmal in Python reproduziert werden soll

Wenn Bernoulli-Versuche (binäre Versuche) mit einer Erfolgswahrscheinlichkeit von p insgesamt n-mal durchgeführt werden,

Eine Funktion zum Ermitteln der Wahrscheinlichkeitsmasse, bei der die Anzahl der Erfolge x beträgt

f(x,n,p) = {}_n \mathrm{ C }_xp^x(1-p)^{ n-x } \quad (0 \leqq n;\ 0 \leqq x \leqq n;\ 0 \leqq p\leqq 1)\\

Eine Funktion, um die niedrigere kumulative Wahrscheinlichkeit der Anzahl der Erfolge x zu finden

P(n,x,p) = \sum_{i=0}^xf(i,n,p)

Funktion zum Ermitteln der oberen kumulativen Wahrscheinlichkeit der Anzahl der Erfolge x

P(n,x,p) = \sum_{i=x}^nf(i,n,p)

Ich habe es in Python geschrieben


import math
import numpy as np
import matplotlib.pyplot as plt

class ToolBox:

  def combination(total, chosen):
      return math.factorial(total) / math.factorial(chosen)/ math.factorial(total-chosen)

class BinomialDistribution:
  """
Generieren Sie ein Binomialverteilungsobjekt mit allen Versuchen n und der Erfolgswahrscheinlichkeit p.

    Attributes
    ----------
    total : int
Gesamtzahl der Versuche n.
    p_of_sccess : float
Erfolgswahrscheinlichkeit in einem Versuch p.
    p_of_fail : float
Ausfallwahrscheinlichkeit in einem Versuch 1-p.
  """

  def __init__(self, total, p_of_success):
    """
    Parameters
    ----------
    total : int
Gesamtzahl der Versuche n.
    p_of_success : float
Erfolgswahrscheinlichkeit in einem Versuch p.
    """
    assert total > 0, "Condition error: 0 <= total"
    assert p_of_success >= 0 and p_of_success <= 1, "Condition error: 0 <= p_of_success <= 1"
    
    self.total = total
    self.p_of_sccess = p_of_success
    self.p_of_fail = 1 - p_of_success

  def get_probability_mass(self, success):
    """
Finden Sie die Wahrscheinlichkeitsmasse, die x-mal erfolgreich ist

    Parameters
    ----------
    success : int
Anzahl der Erfolge x.

    Returns
    -------
    probability_mass : float
Wahrscheinlichkeitsmasse von x.
    """
    assert success >= 0 and success <= self.total, "Condition error: 0 <= sccuess <= total"

    fail = self.total - success
    combination = ToolBox.combination(self.total, success)
    probability_mass = combination * (self.p_of_sccess ** success) * (self.p_of_fail) ** fail
    return probability_mass

  def get_lower_culmitive_distribution(self, success):
    """
Niedrigere kumulative Wahrscheinlichkeit von x(Summe der Wahrscheinlichkeitsmassen von 0 bis x mal)Ich suche.

    Parameters
    ----------
    success : int
Anzahl der Erfolge x.

    Returns
    -------
    result : float
Niedrigere kumulative Wahrscheinlichkeit von x.
    """
    result = 0
    for i in range (0, success + 1):
      result += binomial_distribution.get_probability_mass(i)
    return result

  def get_upper_culmitive_distribution(self, success):
    """
Obere kumulative Wahrscheinlichkeit von x(x ~ Summe der Wahrscheinlichkeitsmassen aller Versuche,)Ich suche.

    Parameters
    ----------
    success : int
Anzahl der Erfolge x.

    Returns
    -------
    result : float
Obere kumulative Wahrscheinlichkeit von x.
    """
    result = 0
    for i in range (success, self.total + 1):
      result += binomial_distribution.get_probability_mass(i)
    return result

  def draw_graph(self):
    """
Zeichnen Sie ein Diagramm und speichern Sie es im PNG-Format.
    """
    x = np.arange(0, self.total + 1, 1)
    y = []
    for i in range(0, self.total + 1):
      y.append(self.get_probability_mass(i))
    plt.plot(x, y)
    plt.savefig('graph.png')

Lauf


#10 Versuche, 0 Erfolgsquote.Erstellen Sie ein Binomialverteilungsobjekt von 5.
binomial_distribution = BinomialDistribution(10, 0.5)

#Holen Sie sich die Wahrscheinlichkeitsmasse für 2 Erfolge.
print(binomial_distribution.get_probability_mass(2))

#Erhalten Sie die niedrigere kumulative Wahrscheinlichkeit, wenn die Erfolgswahrscheinlichkeit 2-mal ist.
print(binomial_distribution.get_lower_culmitive_distribution(2))

#Erhalten Sie die obere kumulative Wahrscheinlichkeit, wenn die Erfolgswahrscheinlichkeit 2-mal ist.
print(binomial_distribution.get_upper_culmitive_distribution(2))

#Zeichnen Sie ein Diagramm dieser Binomialverteilung.
binomial_distribution.draw_graph()

Ergebnis

0.0439453125 #Wahrscheinlichkeitsmasse bei einer Anzahl von Erfolgen von 2
0.0546875 #Geringere kumulative Wahrscheinlichkeit mit 2 Erfolgschancen
0.9892578125 #Obere kumulative Wahrscheinlichkeit, wenn die Erfolgswahrscheinlichkeit das Zweifache beträgt

Ich habe diese Seite benutzt, um die Antworten abzugleichen https://keisan.casio.jp/exec/system/1161228843

Das Diagramm wird im selben Verzeichnis gespeichert. スクリーンショット 2020-04-07 2.05.18.png

Änderungen vom 7. April 2020

Referenzierte Site

Wie schreibe ich MathJax https://easy-copy-mathjax.nakaken88.com/

Site, die die Binomialverteilung berechnet https://keisan.casio.jp/exec/system/1161228843

Wahrscheinlichkeitsdichtefunktion und Wahrscheinlichkeitsmassenfunktion https://data-science.gr.jp/theory/tbs_pdf_and_pmf.html

Recommended Posts

Versuchen Sie, die stochastische Massenfunktion der Binomialverteilung in Python zu transkribieren
Überprüfen Sie die atrophische Natur der Wahrscheinlichkeitsverteilung in Python
Besiege die Wahrscheinlichkeitsdichtefunktion der Normalverteilung
Holen Sie sich den Aufrufer einer Funktion in Python
Passen Sie die Verteilung jeder Gruppe in Python an
Versuchen Sie, die Funktionsliste des Python> os-Pakets abzurufen
Lassen Sie das Gleichungsdiagramm der linearen Funktion in Python zeichnen
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
[Python3] Schreiben Sie das Codeobjekt der Funktion neu
Das Ergebnis der Installation von Python auf Anaconda
[Python] Probieren Sie pydash der Python-Version von lodash aus
Grundlagen zum Ausführen von NoxPlayer in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
[Python] Hinweis: Selbst erstellte Funktion zum Ermitteln des Bereichs der Normalverteilung
Geben Sie die Anzahl der CPU-Kerne in Python aus
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Test von emacs-org parser orgparse für Python
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
In Python ② erlernte statistische Wahrscheinlichkeitsverteilung für Testgrad 2
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Kopieren Sie die Liste in Python
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Probieren Sie Progate Free Edition [Python I]
Korrigieren Sie die Argumente der in map verwendeten Funktion
Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python
Die Geschichte des Lesens von HSPICE-Daten in Python
[Hinweis] Über die Rolle des Unterstrichs "_" in Python
Lösen von Bewegungsgleichungen in Python (odeint)
Ausgabe in Form eines Python-Arrays
Ich habe versucht, die inverse Gammafunktion in Python zu implementieren
Versuchen Sie es mit dem Sammlungsmodul (ChainMap) von python3
In Python ① erlernte statistische Wahrscheinlichkeitsverteilung für Testgrad 2
Versuchen Sie, die Monte-Carlo-Methode in Python zu implementieren
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
Legen Sie die Obergrenze für die Anzahl der Wiederholungen rekursiver Funktionen in Python fest
Finden Sie die kumulative Verteilungsfunktion durch Sortieren (Python-Version)
Erleben Sie die gute Berechnungseffizienz der Vektorisierung in Python
Logistische Verteilung in Python
So ermitteln Sie die Anzahl der Stellen in Python
[Python] Ruft die Liste der im Modul definierten Klassen ab
Verstehen Sie die Exponentialverteilung sorgfältig und zeichnen Sie in Python
der Zen von Python
Zeichnen und verstehen Sie die multivariate Normalverteilung in Python
Die Geschichte von FileNotFound im Python open () -Modus = 'w'
Hinweis: Bedeutung der Angabe von nur * (Sternchen) als Argument in der Funktionsdefinition von Python
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Implementieren Sie die Lösung der Riccati-Algebra in Python
Verstehe die Poisson-Distribution sorgfältig und zeichne in Python
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Den Inhalt der Daten in Python nicht kennen
Versuchen Sie gRPC in Python
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 4 von Hajipata in Python
Verwenden wir die offenen Daten von "Mamebus" in Python