[PYTHON] [Neueste Methode] Visualisierung von Zeitreihendaten und Extraktion häufiger Muster mithilfe des Pan-Matrix-Profils

Überblick

Ich habe die folgenden Zeitreihendaten. 合成時系列データ.png Für Zeitreihendaten wie oben gezeigt ist ** Pan-Matrix-Profil ** wie folgt.

無題.jpg 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.

Was ist ein Pan-Matrix-Profil?

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.

無題1.jpg

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).

Bibliothek für Pan-Matrix-Profil "Matrixprofil"

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

Implementierungsbeispiel (1): Anwendung auf künstliche Daten

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')

合成時系列データ.png

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]

ダウンロード.png 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.

Implementierungsbeispiel (2): Anwendung auf die mitochondriale DNA-Sequenz

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')

ダウンロード (1).png 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]

ダウンロード (2).png 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 $.

Implementierungsbeispiel ③: Anwendung auf das Elektrokardiogramm (EOG)

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')

ダウンロード (3).png 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]

ダウンロード (4).png Diesmal ist es übrigens ein PMP mit einer sehr kleinen vertikalen Breite. Motiv vergrößern und entsprechend herausnehmen. 無2題.jpg

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.

Zusammenfassung

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.

Verweise

Recommended Posts

[Neueste Methode] Visualisierung von Zeitreihendaten und Extraktion häufiger Muster mithilfe des Pan-Matrix-Profils
Glättung von Zeitreihen und Wellenformdaten 3 Methoden (Glättung)
Visualisierung von Daten anhand einer erklärenden Variablen und einer objektiven Variablen
Datenvisualisierungsmethode mit Matplotlib (1)
Datenvisualisierungsmethode mit Matplotlib (2)
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
Vergleich der Vorhersage von Zeitreihendaten zwischen dem SARIMA-Modell und dem Prophet-Modell
Datenvisualisierungsmethode mit Matplotlib (+ Pandas) (3)
Über Zeitreihendaten und Übertraining
Differenzierung von Zeitreihendaten (diskret)
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Datenvisualisierungsmethode mit Matplotlib (+ Pandas) (4)
[Für Anfänger] Skript innerhalb von 10 Zeilen (5. Resample von Zeitreihendaten mit Pandas)
Visualisierung von Breiten- / Längenkoordinatendaten (unter der Annahme meteorologischer Daten) unter Verwendung von Cartopy und Matplotlib
Versuchen Sie es mit PHATE, einer Methode zur Reduzierung und Visualisierung biologischer Daten
[Kaggle] Ich habe versucht, mithilfe von tsfresh das Feature-Quantity-Engineering mehrdimensionaler Zeitreihendaten durchzuführen
OpenFOAM-Zeitreihendaten lesen und Daten einstellen
Zusammenfassung der Kaggle-Kernel-Methode [Tabelle Zeitreihendaten]
Erfassung von Zeitreihendaten (täglich) von Aktienkursen
Zeigen Sie Details zu Zeitreihendaten mit Remotte an
Implementierung der Clustering-K-Form-Methode für Zeitreihendaten [Unüberwachtes Lernen mit Python Kapitel 13]
Analyse von Finanzdaten durch Pandas und deren Visualisierung (2)
Analyse von Finanzdaten durch Pandas und deren Visualisierung (1)
Abnormalitätserkennung von Zeitreihendaten durch LSTM (Keras)
Übersicht und Tipps von Seaborn mit statistischer Datenvisualisierung
Geschichte der Bildanalyse von PDF-Dateien und Datenextraktion
Methode zur Extraktion von Stapeldaten unter Verwendung regulärer Ausdrücke aus Serien
"Zeitreihenanalyse von Wirtschafts- und Finanzdaten messen" Das Problem am Ende des Kapitels mit Python lösen