Probabilité de transition de la chaîne de Markov écrite en Python

1.Tout d'abord

J'écrirai un article sur la probabilité de transition de la chaîne de Markov.

Plus précisément, nous allons introduire une fonction qui obtient la probabilité de transition à partir de données de séries temporelles et crée une matrice. Notez que ce n'est pas une introduction aux fonctions qui traitent de la matrice de probabilité de transition de la chaîne de Markov.

J'écrirai des informations détaillées à partir de "2. Qu'est-ce que la chaîne de Markov?" Si vous ne voulez connaître que le code, je pense qu'il suffit de se référer à "3. Fonction pour trouver la probabilité de transition".

2. Qu'est-ce que la chaîne de Markov?

2.1. Définition de la probabilité de transition

Vous trouverez ci-dessous la définition de la chaîne de Markov sur Wikipedia.

Si l'état actuel est déterminé par une série de variables stochastiques X1, X2, X3, ..., les états passés et futurs sont indépendants.

Source: 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. Formule de probabilité de transition de chaîne de Markov

Ce qui suit est la formule de la chaîne de Markov écrite dans Wikipedia.

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)

Les valeurs possibles de> Xi sont appelées espace d'états de chaîne et forment un ensemble dénombrable S. La chaîne de Markov est représentée par un graphe orienté et l'arête montre la probabilité de transition d'un état à un autre.

Un exemple de chaîne de Markov est une machine à états finis. Cela signifie que s'il est dans l'état y au temps n, la probabilité qu'il passe à l'état x au temps n + 1 dépend uniquement de l'état actuel, pas du temps n.

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

La probabilité exprimée par la formule suivante est appelée probabilité de transition.

Pr(X_{n+1}| X_n)

Source: https://mathtrain.jp/markovchain

2.3. Exemple spécifique

La probabilité de transition est en fait calculée, mais je pense que c'est difficile à imaginer avec juste les définitions et les expressions. Prenons la météo comme exemple.

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('Jours ensoleillés:{0}journée, 曇のjournée数:{1}journée, 雨のjournée数:{2}journée'.format(np.count_nonzero(data==0), np.count_nonzero(data==1), np.count_nonzero(data==2))))

production


Jours ensoleillés:Le 20,Jours nuageux:Le 8,Jours de pluie:Jour 2

En regardant ce qui précède, vous pouvez voir en un coup d'œil que le temps ensoleillé est le plus ensoleillé, suivi du temps nuageux et du temps pluvieux. Cependant, le but est "comment le temps a changé".

Par conséquent, je veux une matrice avec la probabilité de transition connue (Fig.1), mais je ne peux pas la trouver en recherchant.

Alors, créons une fonction.

無題.jpg

3. Fonction pour trouver la probabilité de transition

3.1. Version / environnement Python

J'utilise Python 3.7.1. L'environnement d'utilisation est le notebook Jupyter.

3.2. Créer une fonction

3.2.1 Importation des bibliothèques requises

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

seaborn n'a pas à être inclus fonctionnellement, mais il est inclus car il sera visualisé plus tard.

3.2.2 Données

Cette fois, j'utiliserai tenki.

3.2.3 Fonctions et leurs explications

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 Résultats

Vous avez maintenant une matrice de probabilités de transition.

print(tp(data))

production


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

3.2.4 Visualisation

Cela seul est un peu triste, alors visualisons-le.

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

ダウンロード.png

Dans cette carte de chaleur, l'axe de gauche représente * Xn * et l'axe du bas représente * Xn + 1 *.

4. Enfin

J'ai écrit une fonction sur la probabilité de transition de la chaîne de Markov, mais comment était-ce? Je vous serais reconnaissant de bien vouloir souligner les points difficiles à comprendre ou incorrects.

URL de référence

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

・ Les bases de la chaîne de Markov et l'équation de Kormogorov (une belle histoire de mathématiques au lycée) https://mathtrain.jp/markovchain

Recommended Posts

Probabilité de transition de la chaîne de Markov écrite en Python
Python - Simulation de transition d'état de chaîne de Markov
Gacha écrit en Python -BOX Gacha-
Cool Lisp écrit en Python: Hy
Programme de diagnostic de compatibilité écrit en python
Simulation de transition d'état de chaîne de Markov en temps continu Python
Logique gacha simple écrite en Python
Code de vérification de la série Fourier écrit en Python
Test de stress avec Locust écrit en Python
Obtenez la probabilité de précipitation de XML avec Python
Python en optimisation
CURL en Python
Étudier les mathématiques avec Python: résoudre des problèmes simples de probabilité
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
Markov Chain Artificial Brainless avec Python + Janome (1) Introduction à Janome
Introduction à la vérification de l'efficacité Chapitre 3 écrit en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
PRML Chapitre 11 Implémentation Python Monte Carlo Chaîne de Markov
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Distribution de probabilité de test statistique de niveau 2 apprise en Python
Quad-tree en Python
Réflexion en Python
Introduction à la vérification de l'efficacité Chapitre 2 écrit en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Analyser une chaîne JSON écrite dans un fichier en Python
Apprenez le modèle de conception «Chaîne de responsabilité» en Python
Exécutez CGI écrit en python sur le serveur de location de Sakura