Ich habe die folgenden Zeitreihendaten. Für Zeitreihendaten wie oben gezeigt ist ** Pan-Matrix-Profil ** wie folgt.
Die Wärmekarte unten ist ** Pan-Matrix-Profil **, die horizontale Achse ist die Zeit und die vertikale Achse ist die Länge der Teilzeitreihen. Wenn Sie sich auf den durch ★ angegebenen Scheitelpunkt (?) Beziehen, sehen Sie auf einen Blick die Erscheinungsposition (horizontale Achse) und deren Länge (vertikale Achse) der häufigen Muster, die der Zeitreihe inhärent sind.
Letztes Mal führte ** Matrix Profile ** als innovative Technologie für die Zeitreihendatenanalyse ein. ** Pan-Matrix-Profil (PMP) ** ist einfach eine Matrix der Teilzeitreihenlänge $ m $ von ** MatrixProfile **, die in einem bestimmten Bereich untersucht wurde.
Schauen wir uns das obige Beispielbild an.
Beschreibt, was jedes Element der Matrix ** Pan-Matrix Profile ** bedeutet. Betrachten Sie als Beispiel das Element (504,80). Wie bereits erwähnt, repräsentiert die horizontale Achse die Zeit und die vertikale Achse die Länge der Teilzeitreihen. Erstens für die Teilzeitreihe vom 504. Punkt bis zum 504 + 80. Punkt in der Zeitreihe (die linke Seite der blauen Teilzeitreihe in der oberen Abbildung) der Teil derselben Länge, der dieser Teilzeitreihe am ähnlichsten ist. Berechnen Sie den Abstand zur Zeitreihe (obere Abbildung, blau, rechts). Hier verwendet die Entfernungsskala ** Z-normalisierte euklidische Entfernung **. Nachdem der Abstandswert 0,95 beträgt, enthält das Element (504,80) 0,95.
Wenn Sie versuchen, diese Matrix durch erzwungene Suche zu erstellen, wird übrigens viel Rechenzeit benötigt, z. B. $ O (n ^ 4) $ (jedoch ist $ n $ die Zeitreihenlänge), in Referenz [1] jedoch verschiedene Beschleunigungstechniken Reduziert auf $ O (n ^ 2r) $ (wobei $ r $ die Anzahl der Kandidaten für die Teilzeitreihenlänge ist).
Es gibt viele Bibliotheken für Matrixprofile, daher bin ich verwirrt, aber dieses Mal werde ich eine Python-Bibliothek namens Matrixprofile verwenden. Korrekt.
pip install matrixprofile
Lassen Sie uns zunächst einige Zeitreihendaten implementieren, die standardmäßig in der Bibliothek als synthetische künstliche Daten enthalten sind.
from matplotlib import pyplot as plt
import numpy as np
import matrixprofile as mp
#Daten lesen
dataset = mp.datasets.load('motifs-discords-small')
X = dataset['data']
#Datenvisualisierung
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')
Der Code zum Erstellen und Visualisieren des Pan-Matrix-Profils sieht folgendermaßen aus:
#Pan-Matrixprofil und andere Analysen
profile, figures = mp.analyze(X)
#PMP-Anzeige
figures[0]
Sie können ganz einfach ein PMP mit "mp.analyze (X)" erstellen. Zusätzlich zur PMP-Matrix enthält das "Profil" die Indexmatrix (PMPI) der nächsten Teilzeitreihe für jede Teilzeitreihe, die beim Erstellen eines PMP erforderlich ist, Analyseinformationen wie Motiv und Zwietracht usw.
Und "Zahlen" enthält ein Bild, das die Analyse visualisiert, und die Anzeige wird zum Zeitpunkt der Ausführung von "mp.analyze (X)" ausgeführt, aber nur der PMP-Teil wird mit "Zahlen [0]" angezeigt. Sie können.
Als nächstes wenden wir es auf die tatsächlichen Daten an. Es wird auf die in der Originalarbeit eingeführte DNA-Sequenz von Mitochondrien angewendet [1]. (Genau genommen ist dies keine ** Zeitserie ** ...)
Daten können im Mattenformat von [hier] abgerufen werden (https://sites.google.com/view/pan-matrix-profile/datasets?authuser=0).
#Daten lesen Teil 2
import scipy.io as sio
dataset = sio.loadmat('termite_DNA_circular_shift')
X = dataset['t2'].reshape((-1,))
#Datenvisualisierung
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')
Lassen Sie uns ein Pan-Matrix-Profil erstellen. Diesmal dauert es einige Minuten.
#Pan-Matrixprofil und andere Analyse Teil 2
profile, figures = mp.analyze(X)
#PMP-Anzeige Teil 2
figures[0]
Ich finde, dass PMP nutzlos groß ist. Tatsächlich hat "mp.analyze" einen Schwellenwertparameter "Schwelle", und Sie können den Suchbereich des oberen Grenzwerts für die Teilzeitreihenlänge anpassen, indem Sie ihn anpassen. Ich frage mich, wohin die parameterfreie Formulierung gegangen ist, aber es scheint, dass sie nicht so empfindlich ist wie die Teilzeitreihenlänge $ m $.
Dies sind auch die EOG-Daten, die im Originalpapier verwendet wurden [1].
#Daten lesen 3
dataset = sio.loadmat('eog_multiple_scale_example')
X = dataset['testdata'].reshape((-1,))
#Datenvisualisierung
plt.figure(figsize=(18.0, 6.0))
plt.plot(np.arange(len(X)), X, color="k")
plt.xlim(0, len(X))
plt.title('EOG')
Wenn Sie es mit den Standardeinstellungen visualisieren, sieht es wie folgt aus.
#Pan-Matrixprofil und andere Analyse # 3
profile, figures = mp.analyze(X)
#PMP-Anzeige Teil 3
figures[0]
Diesmal ist es übrigens ein PMP mit einer sehr kleinen vertikalen Breite. Motiv vergrößern und entsprechend herausnehmen.
Nun, das längste Motiv sieht so aus. Das Motiv dieser im Originalpapier eingeführten Daten hätte länger sein sollen. Was zum Teufel ist das Problem?
Wenn Sie sich den Code im Visualisierungsteil der Matrixprofil-Bibliothek ansehen, wird zunächst alles mit einem Abstand von 1 oder mehr in PMP mit 1 gefüllt. Mit anderen Worten, im PMP-Bild sind alle gelben Teile 1. Ist es in Ordnung, so etwas zu tun?
Intuitiv scheint der Abstand zwischen Teilzeitreihen mit zunehmender Teilzeitreihenlänge tendenziell zuzunehmen. Mit anderen Worten, Sie können mit dieser Methode kein langes Motiv abrufen.
Übrigens, laut Originalarbeit scheint die Methode zum Extrahieren des Top-k-Motivs (ich bin mir nicht sicher, ob ich es verstehe) die mit einem kleinen PMP-Wert zu extrahieren. Das macht der Motif-Extrakt-Code für die Matrixprofil-Bibliothek. In diesem Fall denke ich, je kürzer das Motiv ist, desto mehr wird es überschätzt.
Deshalb habe ich dieses Mal die neueste Methode ** Pan-Matrix-Profil ** für die Zeitreihendatenanalyse eingeführt. Es scheint, dass das Ende der Frage noch besteht, aber ich möchte bald daran arbeiten, diese Frage zu lösen.
Recommended Posts