J'ai les données chronologiques suivantes. Pour les données de séries chronologiques comme indiqué ci-dessus, ** Profil Pan-Matrix ** est le suivant.
La carte thermique en bas est ** Profil Pan-Matrix **, l'axe horizontal est le temps et l'axe vertical est la longueur de la série temporelle partielle. En vous référant au sommet (?) Indiqué par ★, vous pouvez voir en un coup d'œil la position d'apparition (axe horizontal) et sa longueur (axe vertical) des motifs fréquents inhérents à la série chronologique.
Dernière fois a présenté ** Matrix Profile ** en tant que technologie innovante pour l'analyse des données de séries chronologiques. ** Pan-Matrix Profile (PMP) ** est simplement une matrice de la longueur partielle de la série temporelle $ m $ de ** MatrixProfile ** examinée dans une certaine plage.
Jetons un œil à l'image d'exemple ci-dessus.
Décrit ce que signifie chaque élément de la matrice ** Profil Pan-Matrix **. À titre d'exemple, considérons l'élément (504,80). Comme mentionné précédemment, l'axe horizontal représente le temps et l'axe vertical représente la longueur de la série chronologique partielle. Premièrement, pour la série chronologique partielle du 504e point au 504 + 80e point de la série chronologique (le côté gauche de la série chronologique partielle bleue dans la figure supérieure), la partie de la même longueur qui est la plus similaire à cette série chronologique partielle. Calculez la distance par rapport à la série chronologique (figure du haut, bleu, droite). Ici, l'échelle de distance utilise la ** distance euclidienne normalisée Z **. Maintenant que la valeur de distance est 0,95, l'élément (504,80) contiendra 0,95.
Au fait, si vous essayez de créer cette matrice par une recherche forcée, cela prend beaucoup de temps de calcul tel que $ O (n ^ 4) $ (cependant, $ n $ est la longueur de la série chronologique), mais dans Reference [1], diverses techniques d'accélération Réduit à $ O (n ^ 2r) $ (où $ r $ est le nombre de candidats pour la longueur de la série chronologique partielle).
Il existe de nombreuses bibliothèques pour matrixprofile, donc je suis confus, mais cette fois j'utiliserai une bibliothèque pour Python appelée matrixprofile. C'est vrai.
pip install matrixprofile
Tout d'abord, implémentons des données de séries chronologiques fournies en standard avec la bibliothèque sous forme de données artificielles synthétiques.
from matplotlib import pyplot as plt
import numpy as np
import matrixprofile as mp
#Lire les données
dataset = mp.datasets.load('motifs-discords-small')
X = dataset['data']
#Visualisation de données
plt.figure(figsize=(18.0, 6.0))
plt.plot(np.arange(len(X)), X, color="k")
plt.xlim(0, len(X))
plt.title('Synthetic Time Series')
Le code pour créer et visualiser le profil Pan-Matrix ressemble à ceci:
#Pan-Profil matriciel et autres analyses
profile, figures = mp.analyze(X)
#Affichage PMP
figures[0]
Vous pouvez facilement créer un PMP avec mp.analyze (X)
. En plus de la matrice PMP, le «profil» contient la matrice d'index (PMPI) de la série temporelle partielle la plus proche pour chaque série temporelle partielle requise lors de la création d'un PMP, des informations d'analyse telles que Motif et Discord, etc.
Et, "figures" contient une image qui visualise l'analyse, et l'affichage est exécuté au moment de l'exécution de "mp.analyze (X)", mais seule la partie PMP est affichée avec "les chiffres [0]". Vous pouvez.
Ensuite, appliquons-le aux données réelles. Il est appliqué à la séquence d'ADN des mitochondries introduite dans l'article original [1]. (Strictement parlant, ce n'est pas une série ** chronologique ** ...)
Les données peuvent être obtenues au format mat sur ici.
#Lecture des données partie 2
import scipy.io as sio
dataset = sio.loadmat('termite_DNA_circular_shift')
X = dataset['t2'].reshape((-1,))
#Visualisation de données
plt.figure(figsize=(18.0, 6.0))
plt.plot(np.arange(len(X)), X, color="k")
plt.xlim(0, len(X))
plt.title('Mitochondrial DNA Sequence')
Créons un profil Pan-Matrix. Cette fois, cela prendra quelques minutes.
#Pan-Profil matriciel et autre analyse partie 2
profile, figures = mp.analyze(X)
#Affichage PMP partie 2
figures[0]
Je pense que PMP est inutilement grand. En fait, mp.analyze
a un paramètre de seuil seuil
, et vous pouvez ajuster la plage de recherche de la valeur limite supérieure de la longueur de la série temporelle partielle en l'ajustant. Je me demande où est allé le libellé sans paramètre, mais il semble qu'il n'est pas aussi sensible que la longueur de la série chronologique partielle $ m $.
Il s'agit également des données EOG utilisées dans le document original [1].
#Lecture des données 3
dataset = sio.loadmat('eog_multiple_scale_example')
X = dataset['testdata'].reshape((-1,))
#Visualisation de données
plt.figure(figsize=(18.0, 6.0))
plt.plot(np.arange(len(X)), X, color="k")
plt.xlim(0, len(X))
plt.title('EOG')
Si vous le visualisez avec les paramètres par défaut, ce sera comme suit.
#Pan-Profil matriciel et autres analyses # 3
profile, figures = mp.analyze(X)
#Affichage PMP partie 3
figures[0]
À propos, cette fois, il s'agit d'un PMP avec une très petite largeur verticale. Agrandissez et retirez Motif de manière appropriée.
Eh bien, le motif le plus long ressemble à ceci. Le motif de ces données présentées dans l'article original aurait dû être plus long. Quel est le problème?
Tout d'abord, si vous regardez le code dans la partie visualisation de la bibliothèque matrixprofile
, tout ce qui a une distance de 1 ou plus dans PMP est rempli avec 1. En d'autres termes, dans l'image PMP, toutes les parties jaunes sont 1. Est-ce que je peux faire quelque chose comme ça?
Intuitivement, il semble que la distance entre les séries chronologiques partielles tend à augmenter à mesure que la longueur de la série chronologique partielle augmente. En d'autres termes, vous ne pouvez pas récupérer un long Motif avec cette méthode.
À propos, selon l'article original, la méthode d'extraction de Top-k Motif (je ne sais pas si je le comprends) semble extraire celui avec une petite valeur PMP. C'est ce que fait le code d'extrait Motif pour la bibliothèque matrixprofile
. Dans ce cas, je pense que plus le Motif est court, plus il est surestimé.
Donc, cette fois, j'ai présenté la dernière méthode ** Profil Pan-Matrix ** pour l'analyse des données de séries chronologiques. Il semble que la fin de la question demeure, mais j'aimerais travailler à résoudre cette question bientôt.
Recommended Posts