3

Ich arbeite an einer Zeitreihendaten. Die verfügbaren Daten sind multivariabel. Für jeden Zeitpunkt stehen also drei Datenpunkte zur Verfügung. Format:Mehrdimensionale/multivariate dynamische Time Warping (DTW) Bibliothek/Code in Python

| X | Y | Z |

So eine Zeitreihendaten in obiges Format würde erzeugt Echtzeit werden. Ich versuche eine gute Übereinstimmung dieser in Echtzeit erzeugten Zeitreihe innerhalb einer anderen Zeitreihendatenbasis zu finden, die bereits gespeichert ist (die viel größer ist und auf einer anderen Frequenz gesammelt wurde). Wenn ich Standard-DTW auf jede der Reihen (X, Y, Z) einzeln anwende, könnten sie am Ende eine Übereinstimmung an verschiedenen Punkten innerhalb der Basisdatenbank erhalten, was ungünstig ist. Also muss ich einen Punkt in der Basisdatenbank finden, wo alle drei Komponenten (X, Y, Z) gut und am selben Punkt übereinstimmen.

Ich habe in die Sache geforscht und herausgefunden, dass multidimensionales DTW eine perfekte Lösung für solch ein Problem ist. In R enthält das dtw-Paket mehrdimensionale DTW, aber ich muss es in Python implementieren. Das R-Python-Bridging-Paket nämlich "rpy2" kann hier wohl helfen, aber ich habe keine Erfahrung in R. Ich habe mir verfügbare DTW-Pakete in Python wie mlpy, dtw angeschaut aber helfe nicht. Kann jemand vorschlagen, ein Paket in Python das gleiche oder den Code für mehrdimensionale DTW mit rpy2 zu tun.

Vielen Dank im Voraus!

Antwort

2

Ich denke, dass es eine gute Idee ist, eine Methode in welcher Implementierung bereits verfügbar zu testen, bevor man darüber nachdenkt, ob es sich lohnt, an einer Neuimplementierung zu arbeiten.

Haben Sie Folgendes versucht?

from rpy2.robjects.packages import importr 
# You'll obviously need the R package "dtw" installed with your R 
dtw = importr("dtw") 

# all functions and objects in the R package "dtw" are now available 
# with `dtw.<function or object>` 
3

Dank @lgautier ich tiefer gegraben und fand Umsetzung von multivariaten DTW rpy2 in Python. Das Übergeben der Vorlage und Abfrage als 2D-Matrizen (Matrizen wie in R) würde dem rpy2-dtw-Paket erlauben, eine multivariate DTW auszuführen. Auch wenn Sie R installiert haben, würde das Laden der R dtw-Bibliothek und "? Dtw" den Zugriff auf die Bibliotheksdokumentation und verschiedene Funktionen ermöglichen, die mit der Bibliothek verfügbar sind.

Für die Zukunft an andere Benutzer mit ähnlichen Fragen: Offizielle Dokumentation von R dtw Paket: https://cran.r-project.org/web/packages/dtw/dtw.pdf Beispielcode, zwei 2-D-Matrizen für multivariate DTW, die open_begin und open_end Argumente ermöglichen Teilfolge Matching vorbei:

import numpy as np 
import rpy2.robjects.numpy2ri 
rpy2.robjects.numpy2ri.activate() 
from rpy2.robjects.packages import importr 
import rpy2.robjects as robj 

R = rpy2.robjects.r 
DTW = importr('dtw') 

# Generate our data 
template = np.array([[1,2,3,4,5],[1,2,3,4,5]]).transpose() 
rt,ct = template.shape 
query = np.array([[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]]).transpose() 
rq,cq = query.shape 

#converting numpy matrices to R matrices 
templateR=R.matrix(template,nrow=rt,ncol=ct) 
queryR=R.matrix(query,nrow=rq,ncol=cq) 

# Calculate the alignment vector and corresponding distance 
alignment = R.dtw(templateR,queryR,keep=True, step_pattern=R.rabinerJuangStepPattern(4,"c"),open_begin=True,open_end=True) 

dist = alignment.rx('distance')[0][0] 

print dist 
+0

Hey @mosdkr, ich versuche gerade multivariates dynamisches Time Warping zu implementieren, um meine Zeitreihen zu clustern. Ich konnte dein Beispiel nicht verstehen. Ist die Vorlage für Zeitstempel für 5-D-Daten. Was ist Abfrage? Danke im Voraus . –

+0

Hallo, also führt das obige Beispiel einen Musterabgleich unter Verwendung der Untersequenz DTW durch, um herauszufinden, welcher Unterabschnitt/Unterabschnitt der Abfrage mit der Vorlage übereinstimmt. Die Vorlage ist eine 5X2-Matrix, was bedeutet, dass es sich um eine bivariate Daten handelt und 5 Datenpunkte (5 Zeitstempel) für jede der zwei Variablen aufweist, die Abfrage ist wiederum eine bivariate Daten aber mit 16 Datenpunkten. – mosdkr

+0

Vielen Dank! Hast du mlpy ausprobiert oder denkst du, dass es multivariates DTW gibt? http://mlpy.sourceforge.net/docs/3.5/ –