[PYTHON] So ermitteln Sie die durchschnittliche Informationsmenge (Entropie) der ursprünglichen Wahrscheinlichkeitsverteilung aus der Stichprobe

** Hinweise zu diesem Artikel ** Es ist ein Amateur-Graffiti. Ich denke, es gibt viele Fehler, falsche Begriffe und keinen Beweis. Danke für Ihr Verständnis.

Zweck dieses Artikels

Ich möchte die durchschnittliche Informationsmenge der ursprünglichen Wahrscheinlichkeitsverteilung aus der Stichprobe ermitteln, die durch die kontinuierliche Wahrscheinlichkeitsverteilung generiert wurde.

Theorie

Die durchschnittliche Informationsmenge einer kontinuierlichen Wahrscheinlichkeitsverteilung mit einer Wahrscheinlichkeitsdichtefunktion $ , , f , $ $ , h (X) , $ wird durch Gleichung 1 ausgedrückt, aber die Anzahl der Abtastwerte $ , N , $ ist Wenn es groß genug ist, kann es aus der Informationsmenge jeder Probe $ , , x_i , $ erhalten werden, wie in Gleichung 2 gezeigt (sollte).

\begin{align}
&h(X) = \int_{\chi}^{}f(x)\,log\,f(x)\,dx\qquad\qquad ・ ・ ・ Gleichung 1\\
&h(X) \approx \frac{1}{N}\sum_{i=1}^{N}\,-logP(\,X = x_i\,)\,\qquad ・ ・ ・ Gleichung 2
\end{align}

Um $ , h (X) $ aus Gleichung 2 zu erhalten, ist es notwendig, $ , P (, X = x_i ,) , $ für jede Probe $ , , x_i , $ zu erhalten. .. Von hier aus werde ich ein wenig erklären, wie man $ P (, X = x_i ,) , $ und $ , h (X) , $ findet.

Zunächst definieren wir einige Größen.

P(\,X=x_i\,)\, \approx \frac{n_i}{NV(r)}\qquad ・ ・ ・ Gleichung 3

Gleichung 4 wird erhalten, indem Gleichung 3 in Gleichung 2 eingesetzt wird.

\begin{align}
h(X,r) &\approx \frac{1}{N}\sum_{i=1}^{N}\,-log\frac{n_i}{NV(r)}\\
&= \,logV(r) + logN - \frac{1}{N}\sum_{i=1}^{N}\,log\,n_i\qquad ・ ・ ・ Gleichung 4
\end{align}

Um die Näherung von Gleichung 3 zu ermitteln, ist es vorzuziehen, dass $ r , $ einen möglichst kleinen Wert annehmen. Solange jedoch die Anzahl der Abtastwerte endlich ist und $ r , $ extrem klein ist, kann das Gesetz der großen Zahlen nicht erfüllt werden, und die Approximation von Gleichung 3 bricht zusammen. Daher ist es notwendig zu überlegen, wie $ r , $ richtig bestimmt werden kann, während die tatsächlichen Daten betrachtet werden.     $ ^ * \ lim_ {d (x_i, , x_j) \ bis 0} P (, X = x_i ,) = lim_ {d (x_i, , x_j) \ bis 0} P (, X = x_j) Alles sollte in Ordnung sein, solange es ,) , , $ erfüllt

Anwendung

Generieren Sie eine Stichprobe aus einer geeigneten zweidimensionalen Gaußschen Verteilung und finden Sie $ h (X) , $.

import numpy as np
from matplotlib import pyplot as plt


def calc_d(x):
    N = len(x)
    x_tiled = np.tile(x, (N, 1, 1))
    d = np.linalg.norm(x_tiled - x_tiled.transpose((1, 0, 2)), axis=2)
    return d


#Wenden Sie die Formel für die Fläche des Kreises an, da die Anzahl der Dimensionen 2 beträgt.
def calc_v(r):
    v = np.pi * np.power(r, 2)
    return v


def calc_h(d, v, N, r):
    n = np.sum(d <= r, axis=0)
    h = np.log(v) + np.log(N) - np.sum(np.log(n)) / N
    return h


#Generieren Sie Daten aus einer geeigneten zweidimensionalen Gaußschen Verteilung
data = np.random.normal(0, 1, (1000, 2))
#h beim Ändern von r(X)Berechnen
r_list = [(i + 1) * 0.01 for i in range(10000)]  #Der Bereich von r wurde entsprechend festgelegt
d = calc_d(data)
N = len(data)
h_list = [calc_h(d, calc_v(r), N, r) for r in r_list]
#Zeichnen Sie ein Diagramm
#Zeichnen Sie den berechneten Wert mit einer durchgezogenen blauen Linie
plt.figure(0)
plt.plot(r_list, h_list, color='blue', linestyle='solid')
#Zeichnen Sie den aus der Stichprobenvarianz berechneten Wert mit einer blau gepunkteten Linie
Z = np.cov(data[:, 0], data[:, 1])
h_s = 0.5 * np.log(np.linalg.det(2 * np.pi * np.e * Z))
plt.plot(r_list, [h_s for _ in range(len(r_list))], color='blue', linestyle='dotted')
#Zeichnen Sie den aus der Populationsvarianz berechneten Wert mit einer orange gepunkteten Linie
h_u = np.log(2 * np.pi * np.e)
plt.plot(r_list, [h_u for _ in range(len(r_list))], color='orange', linestyle='dotted')
plt.xlim([0, 3])
plt.ylim([0, 5])
plt.show()

Bei der Ausführung wird ein solcher Graph erhalten.

Figure_0.png

Die horizontale Achse repräsentiert $ , r , $ und die vertikale Achse repräsentiert $ , h (X, r) , $. Wie theoretisch erklärt, ist $ , h (X, r) , $ umso näher am wahren Wert, je kleiner $ r , $ ist. Wenn er jedoch zu klein ist, divergiert er wiederum in Richtung negativer Unendlichkeit. Ich werde gehen. Wenn man sich das Diagramm ansieht, scheint es irgendwie gut zu sein, $ , r , $ so zu entscheiden, dass die Steigung am kleinsten ist. In Anbetracht der Tatsache, dass $ , \ frac {\ partiell} {\ partiell r} h (X, r) = 0 , $ gilt, wenn die Approximation von Gleichung 3 gilt, ist diese Bestimmungsmethode nicht so seltsam. Ich denke, aber es gibt keinen Beweis, daher ist Überbewusstsein verboten.

Recommended Posts

So ermitteln Sie die durchschnittliche Informationsmenge (Entropie) der ursprünglichen Wahrscheinlichkeitsverteilung aus der Stichprobe
Berechnen des aus ABC134-D gelernten Rechenaufwands
So ermitteln Sie den Skalierungskoeffizienten eines bipolaren Wavelets
Darstellung der Verteilung der Bakterienzusammensetzung aus Qiime2-Analysedaten in einem Box-Whisker-Diagramm
So ermitteln Sie die Speicheradresse des Pandas-Datenrahmenwerts
So berechnen Sie die Volatilität einer Marke
So finden Sie den Bereich des Boronoi-Diagramms
[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
Schritte zur Berechnung der Wahrscheinlichkeit einer Normalverteilung
So veröffentlichen Sie ein Ticket über die Shogun-API
Ich habe versucht, die Entropie des Bildes mit Python zu finden
[Ubuntu] So löschen Sie den gesamten Inhalt des Verzeichnisses
So finden Sie die optimale Anzahl von Clustern für k-means
Erben Sie die Standardbibliothek, um den Durchschnittswert der Warteschlange zu ermitteln
Wie kann man schnell die Häufigkeit des Auftretens von Zeichen aus einer Zeichenfolge in Python zählen?
Wie man aus einer Wahrscheinlichkeitsdichtefunktion in Python tastet
So erhalten Sie eine Liste mit Links von einer Seite aus Wikipedia
So verbinden Sie den Inhalt der Liste mit einer Zeichenfolge
So machen Sie einen Screenshot des Chrome-Bildschirms (verhindern Sie, dass er in der Mitte abgeschnitten wird)
So bestimmen Sie die Existenz eines Selenelements in Python
So überprüfen Sie die Speichergröße einer Variablen in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
So geben Sie das Ausgabeergebnis des Linux-Befehls man in eine Datei aus
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy
So extrahieren Sie die gewünschte Zeichenfolge aus einem Befehl in Zeile 4
Wie erstelle ich eine große Menge an Testdaten in MySQL? ??
Finden Sie alle Muster, um eine bestimmte Zahl aus dem Satz zu extrahieren
[NNabla] So entfernen Sie die mittlere Ebene eines vorgefertigten Netzwerks
[Python] Eine einfache Funktion zum Ermitteln der Mittelkoordinaten eines Kreises
Von der Einführung der GoogleCloudPlatform Natural Language API bis zur Verwendung
So ermitteln Sie die Anzahl der CPUs ohne den Befehl sar
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
[NNabla] Hinzufügen einer Quantisierungsschicht zur mittleren Schicht eines trainierten Modells
So setzen Sie eine Zeilennummer am Anfang einer CSV-Datei
So erhalten Sie mithilfe der API von Virus Total einen Beispielbericht aus einem Hashwert
So erstellen Sie einen Wrapper, der die Signatur der zu umschließenden Funktion beibehält
Holen Sie sich das durchschnittliche Gehalt eines Jobs mit bestimmten Bedingungen von Indeed.com
So spielen Sie ein Video ab, während Sie die Anzahl der Bilder ansehen (Mac)
So erstellen Sie einen Klon aus Github
So überprüfen Sie die Version von Django
So speichern Sie die Feature-Point-Informationen des Bildes in einer Datei und verwenden sie zum Abgleichen
So bedienen Sie Linux von der Konsole aus
So erstellen Sie ein Repository aus Medien
So greifen Sie von außen auf den Datenspeicher zu
Verwenden Sie Ruby und Python, um die Wahrscheinlichkeit zu ermitteln, dass eine Karte mit einer natürlichen Zahl von 1 bis 100 ein Vielfaches von 3 und kein Vielfaches von 5 ist.
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Wie man eine Benutzergruppe mit Slack-Benachrichtigung erwähnt, wie man die ID einer Benutzergruppe überprüft
Ein Programmieranfänger versuchte, die Ausführungszeit des Sortierens usw. zu überprüfen.
Finden Sie heraus, wie Sie eine Datei mit einer bestimmten Anzahl von Zeilen gleichmäßig teilen können
[NNabla] So erhalten Sie die Ausgabe (Variable) der mittleren Schicht des erstellten Netzwerks
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
Ein Memorandum zur Ausführung des Befehls! Sudo magic in Jupyter Notebook
SSH-Anmeldung am Zielserver von Windows mit einem Klick auf eine Verknüpfung
[Numpy, scipy] Wie berechnet man die Quadratwurzel einer Elmeet-Matrix mit halbregelmäßigem Wert?
So ermitteln Sie den Koeffizienten der ungefähren Kurve, die in Python durch die Scheitelpunkte verläuft
So erstellen Sie einen Raspberry Pi, der die Tweets eines bestimmten Benutzers spricht
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung