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.
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
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
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.
Ich benutze Python 3.7.1. Die Nutzungsumgebung ist Jupyter Notebook.
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.
Dieses Mal werde ich Tenki verwenden.
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
zero
In Tenki werden drei Informationen verwendet: "0-2".
Wenn Sie daher "np.max (Daten) +1" nehmen, können Sie eine 0-Matrix mit Maximalwert * Maximalwert erstellen.
(Wir können 3 oder mehr oder weniger verarbeiten.) --Verarbeitung in für
"I, j" steht für Xn * bzw. * Xn + 1 *.
"X, y" steht für die Spalte und Zeile der Variablen "Null".
Durch die Verarbeitung in für wird eine konkrete Kombination in die Variable "Null" eingegeben.
row_sum --Das Innere der Variablen "Null" sind die Zähldaten.
Die Gesamtzahl wird für jede Zeile angegeben.
prob
Die Summe jeder Zeile wird durch den individuellen Wert jeder Zeile geteilt.
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. ]]
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)
In dieser Wärmekarte repräsentiert die linke Achse * Xn * und die untere Achse * Xn + 1 *.
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.
・ 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