Übergangswahrscheinlichkeit der in Python geschriebenen Markov-Kette

1. Zuallererst

Ich werde einen Artikel über die Übergangswahrscheinlichkeit der Markov-Kette schreiben.

Insbesondere werden wir eine Funktion einführen, die die Übergangswahrscheinlichkeit aus Zeitreihendaten erhält und eine Matrix erstellt. Beachten Sie, dass dies keine Einführung in eine Funktion ist, die sich mit der Übergangswahrscheinlichkeitsmatrix der Markov-Kette befasst.

Ich werde detaillierte Informationen aus "2. Was ist die Markov-Kette?" Wenn Sie nur den Code kennen möchten, reicht es meiner Meinung nach aus, auf "3. Funktion zum Ermitteln der Übergangswahrscheinlichkeit" zu verweisen.

2. Was ist die Markov-Kette?

2.1 Definition der Übergangswahrscheinlichkeit

Unten ist die Definition der Markov-Kette in Wikipedia.

Wenn der aktuelle Zustand durch eine Reihe stochastischer Variablen X1, X2, X3, ... bestimmt wird, sind der vergangene und der zukünftige Zustand unabhängig.

Quelle: https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%82%B3%E3%83%95%E9%80%A3%E9% 8E% 96

2.2 Markov-Kettenübergangswahrscheinlichkeitsformel

Das Folgende ist die in Wikipedia geschriebene Markov-Kettenformel.

Pr(X_{n+1}=x | X_n=x_n,..., X_1=x_1,X_0=x_0) = Pr(X_{n+1}=x_{n+1} | X_n=x_n)

Die möglichen Werte von> Xi werden als Kettenzustandsraum bezeichnet und bilden eine zählbare Menge S. Die Markov-Kette wird durch einen gerichteten Graphen dargestellt, und die Kante zeigt die Wahrscheinlichkeit des Übergangs von einem Zustand in einen anderen.

Ein Beispiel für die Markov-Kette ist eine Finite-State-Maschine. Dies bedeutet, dass, wenn es sich zum Zeitpunkt n im Zustand y befindet, die Wahrscheinlichkeit, dass es sich zum Zeitpunkt n + 1 in den Zustand x bewegt, nur vom aktuellen Zustand abhängt, nicht vom Zeitpunkt n.

Quelle: https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%82%B3%E3%83%95%E9%80%A3%E9% 8E% 96

Die durch die folgende Formel ausgedrückte Wahrscheinlichkeit wird als Übergangswahrscheinlichkeit bezeichnet.

Pr(X_{n+1}| X_n)

Quelle: https://mathtrain.jp/markovchain

2.3. Spezifisches Beispiel

Die Übergangswahrscheinlichkeit wird tatsächlich berechnet, aber ich denke, es ist schwer, sich nur die Definitionen und Ausdrücke vorzustellen. Nehmen wir als Beispiel das Wetter.

tenki = np.array([0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1])
print('Sonnige Tage:{0}Tag, 曇のTag数:{1}Tag, 雨のTag数:{2}Tag'.format(np.count_nonzero(data==0), np.count_nonzero(data==1), np.count_nonzero(data==2))))

Ausgabe


Sonnige Tage:Der 20 ..,Wolkige Tage:Der 8 ..,Regnerische Tage:2 Tage

Wenn Sie sich das Obige ansehen, können Sie auf einen Blick erkennen, dass das sonnigste Wetter am meisten ist, gefolgt von bewölktem Wetter und regnerischem Wetter. Der Zweck ist jedoch "wie sich das Wetter geändert hat".

Daher möchte ich eine Matrix mit bekannter Übergangswahrscheinlichkeit (Abb. 1), kann sie aber nicht durch Suchen finden.

Erstellen wir also eine Funktion.

無題.jpg

3. Funktion zum Ermitteln der Übergangswahrscheinlichkeit

3.1. Python-Version / Umgebung

Ich benutze Python 3.7.1. Die Nutzungsumgebung ist Jupyter Notebook.

3.2. Erstellen einer Funktion

3.2.1 Import der erforderlichen Bibliotheken

import numpy as np
import copy
import itertools
import seaborn as sns

Seaborn muss nicht funktional enthalten sein, aber es ist enthalten, da es später visualisiert wird.

3.2.2 Daten

Dieses Mal werde ich Tenki verwenden.

3.2.3 Funktionen und ihre Erklärungen

def tp(transition_probability):
    
    data = transition_probability
    zero = np.zeros((np.max(data)+1,np.max(data)+1))

    for i in range(len(data)-1):
        j = copy.deepcopy(i)
        j += 1
        for x, y in itertools.product(range(np.max(data)+1), range(np.max(data)+1)):
            if data[i] == x and data[j] == y:
                zero[x][y] += 1
    
    row_sum = np.sum(zero, axis=1).reshape((np.max(data)+1,1))
    prob    = zero / row_sum
    
    return prob

3.2.3 Ergebnisse

Jetzt haben Sie eine Matrix von Übergangswahrscheinlichkeiten.

print(tp(data))

Ausgabe


[[0.65       0.25       0.1       ]
 [0.57142857 0.42857143 0.        ]
 [1.         0.         0.        ]]

3.2.4 Visualisierung

Das allein ist ein bisschen traurig, also lasst es uns visualisieren.

sns.heatmap(tp(data), cmap='Blues', vmin=0, vmax=1, center=.5,
            square=True, cbar_kws={"shrink": .5},
            xticklabels = 1, yticklabels = 1)

ダウンロード.png

In dieser Wärmekarte repräsentiert die linke Achse * Xn * und die untere Achse * Xn + 1 *.

4. Schließlich

Ich habe eine Funktion über die Übergangswahrscheinlichkeit der Markov-Kette geschrieben, aber wie war es? Ich würde es begrüßen, wenn Sie auf Punkte hinweisen könnten, die schwer zu verstehen oder falsch sind.

Referenz-URL

・ Markov-Kette (Wikipedia) https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%82%B3%E3%83%95%E9%80%A3%E9%8E%96

・ Die Grundlagen der Markov-Kette und der Kormogorov-Gleichung (eine schöne Geschichte der Mathematik der High School) https://mathtrain.jp/markovchain

Recommended Posts

Übergangswahrscheinlichkeit der in Python geschriebenen Markov-Kette
Python - Markov Chain State Transition Simulation
Gacha geschrieben in Python -BOX Gacha-
Cooles Lisp geschrieben in Python: Hy
Kompatibilitätsdiagnoseprogramm in Python geschrieben
Python-Continuous Time Markov-Kettenzustandsübergangssimulation
Einfache Gacha-Logik in Python geschrieben
In Python geschriebener Fourier-Serien-Verifizierungscode
Stresstest mit Locust in Python geschrieben
Holen Sie sich mit Python die Niederschlagswahrscheinlichkeit aus XML
Python in der Optimierung
CURL in Python
Mathematik studieren mit Python: Lösen einfacher Wahrscheinlichkeitsprobleme
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
Markov Chain Artificial Brainless mit Python + Janome (1) Einführung in Janome
Einführung in die Überprüfung der Wirksamkeit Kapitel 3 in Python geschrieben
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
PRML Kapitel 11 Implementierung der Markov-Kette Monte Carlo Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
In Python ① erlernte statistische Wahrscheinlichkeitsverteilung für Testgrad 2
Quad-Tree in Python
Reflexion in Python
Einführung in die Überprüfung der Wirksamkeit Kapitel 2 in Python geschrieben
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Analysieren Sie eine JSON-Zeichenfolge, die in eine Datei in Python geschrieben wurde
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Führen Sie in Python geschriebenes CGI auf Sakuras Mietserver aus