(Python) Erwarteter Wert ・ Ich habe versucht, die Monte-Carlo-Probenahme sorgfältig zu verstehen

Einführung

Ich habe die Erwartungen für das Studium der Bayes'schen Statistik überprüft.

Ich bezog mich auf das folgende Buch.

Was ist der erwartete Wert?

Die Erwartung ist der Durchschnittswert von $ f (x) $ unter der Wahrscheinlichkeitsverteilung $ p (x) $ einer Funktion $ f (x) $. Schreiben Sie als Notation $ E [f] $.

In der diskreten Verteilung wird es wie folgt ausgedrückt.


E[f] = \sum_x p(x)f(x)

Andererseits können kontinuierliche Variablen als Integrale ausgedrückt werden.


E[f] = \int p(x)f(x)dx

Entropie

Der folgende erwartete Wert für die Wahrscheinlichkeitsverteilung $ p (x) $ wird als Entropie bezeichnet.

\begin{align}
H[p(x)]& = - \sum_x p(x) ln(p(x))\\

\end{align}

Ungefähr mit endlicher Summe (Monte-Carlo-Stichprobe)

Wenn die Menge der unabhängig von der Verteilung $ p (x) $ extrahierten Stichproben $ \ bf {z} ^ {(n)} (n = 1, ..., N) $ ist, sind die erwarteten Werte wie folgt. Kann als angenähert werden


E[f] = \frac{1}{L} \sum_{n=1}^{N}f(\bf{z}^{(N)})

Es wird sein.

Betrachten wir hier ein Beispiel. Beispiel Betrachten Sie eine diskrete Verteilung, so dass $ p (x = 1) = 0,3 und p (x = 1) = 0,7 $.

Nach der Definition von Entropie ist Entropie

\begin{align}
H[p(x)]& = - \sum_x p(x) ln(p(x))\\
&=-(p(x=1)lnp(x=1) + p(x=0)lnp(x=0) )\\
&= -(\frac{3}{10}ln\frac{3}{10}+\frac{7}{10}ln\frac{7}{10})\\
&=0.610
\end{align}

Es wird sein. Berechnen wir nun, wenn wir dies mit einer endlichen Summe approximieren. Die Methode random.uniform gibt einen zufälligen Wert zwischen 0 und 1 und $ x = 1 $ oder $ x = 2 $ aus, je nachdem, ob er größer als $ p (x = 1) = 0,3 $ ist. Ich versuche festzustellen, ob es ist. Und die Häufigkeit, mit der $ x = 1,2 $ ist, wird von cnt gezählt.   Das Programm wird wie folgt sein. Ich habe 1000 mal als Versuch berechnet.

cnt = []
proba_1  =[]
proba_2  =[]
time = 1000
a = random.uniform(0,1)
exp =[]

for i in range(time):
    a = random.uniform(0,1)
    if a > p1:
        cnt = np.append(cnt,1)
    else:
        cnt = np.append(cnt, 0)
    proba_1 = np.append(proba_1, (i+1-sum(cnt))/(i+1))
    proba_2 = np.append(proba_2, sum(cnt)/(i+1))
    exp = np.append(exp, -(((i+1-sum(cnt))*math.log(p1))+((sum(cnt))*math.log(p2)))/(i+1))
 
plt.xlabel('time')
plt.ylabel('probability')
plt.plot(time_plot, proba_2, label="p2")
plt.plot(time_plot, proba_1, label="p1")
plt.legend()       

002.png

Es wurde gefunden, dass es nach ungefähr 100 Mal zu $ p (x = 1) = 0,3 und p (x = 2) = 0,7 $ konvergiert.

003.png

Es wurde gefunden, dass dies auch gegen 0,61 des erwarteten Wertes (= Entropie) konvergierte, der ursprünglich nach 100-mal erhalten wurde.

Es wurde bestätigt, dass es bei dieser Annäherungsmethode für den erwarteten Wert kein Problem gibt.

Am Ende

Diesmal war es ein sehr einfaches Beispiel, daher war es einfach zu berechnen und zu bestätigen. Bei tatsächlichen Problemen ist es jedoch oft schwierig, den erwarteten Wert analytisch zu erhalten. Daher halte ich es für nützlich, sich daran zu erinnern, dass sich diese Monte-Carlo-Stichprobe annähert.

Der vollständige Text des Programms ist hier. https://github.com/Fumio-eisan/VI20200520

Recommended Posts

(Python) Erwarteter Wert ・ Ich habe versucht, die Monte-Carlo-Probenahme sorgfältig zu verstehen
Ich habe versucht, Python zu berühren (Installation)
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, PLSA in Python 2 zu implementieren
Python3-Standardeingabe habe ich versucht zusammenzufassen
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, PPO in Python zu implementieren
[Python] Ich habe versucht, TF-IDF stetig zu berechnen
Ich habe versucht, Python zu berühren (grundlegende Syntax)
Ich habe versucht, die Bayes'sche lineare Regression durch Gibbs-Sampling in Python zu implementieren
(Maschinelles Lernen) Ich habe versucht, die Bayes'sche lineare Regression bei der Implementierung sorgfältig zu verstehen
Ich habe versucht, den entscheidenden Baum (CART) zu verstehen, um ihn sorgfältig zu klassifizieren
#Monte Carlo-Methode zum Ermitteln des Umfangsverhältnisses mit Python
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
[Python & SQLite] Ich habe den erwarteten Wert eines Rennens mit Pferden im 1x-Gewinnbereich ① analysiert
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Selbst Anfänger möchten sagen "Ich verstehe Python voll und ganz"
Als ich versuchte, Python3 in Atom einzuführen, blieb ich stecken
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe Python> autopep8 ausprobiert
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Fortsetzung ・ Ich habe versucht, Slackbot zu erstellen, nachdem ich Python3 studiert habe
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Ich habe versucht, Drakues Poker in Python zu implementieren
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht zu debuggen.
Ich habe versucht, GA (genetischer Algorithmus) in Python zu implementieren
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe Python> Decorator ausprobiert
[Python] Ich habe versucht, Json von Tintenfischring 2 zu bekommen
Ich habe versucht, mit Python auf Google Spread Sheets zuzugreifen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, AOJs Integer-Theorie mit Python zu lösen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich möchte initialisieren, wenn der Wert leer ist (Python)
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Ich habe verschiedene Methoden ausprobiert, um japanische Post mit Python zu senden
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Ich habe jeden Tag 13 LeetCode ausprobiert. Roman to Integer (Python, Go)
[Markov-Kette] Ich habe versucht, negative Emotionen in Python zu laden.
[Markov-Kette] Ich habe versucht, die Zitate in Python einzulesen.
Ich habe versucht "Wie man eine Methode in Python dekoriert"
[Python] Ich habe versucht, Tweets über Corona mit WordCloud zu visualisieren
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren