[PYTHON] [Kaggle] Ich habe versucht, mithilfe von tsfresh das Feature-Quantity-Engineering mehrdimensionaler Zeitreihendaten durchzuführen

0. Einleitung

Zeitreihendaten sind plötzlich schwer zu verarbeiten, nicht wahr? Darüber hinaus denke ich, dass es mit zunehmender Anzahl von Variablen immer schmerzhafter wird. "Sobald Sie die Funktionen aus den Zeitreihendaten extrahiert haben, können Sie alles andere tun!" Ich denke, es gibt viele Leute.

Dieses Mal werden wir ** tsfresh ** einführen, eine Bibliothek, die für das Feature-Quantity-Engineering mehrdimensionaler Zeitreihendaten nützlich zu sein scheint.

Ich habe auf den folgenden Artikel verwiesen.

1. Installieren Sie tsfresh

Ich habe es über Pip installiert. Sie konnten nicht von pip installieren, ohne pip zu aktualisieren. Bitte aktualisieren Sie pip.

pip install --upgrade pip

Upgrade pip mit

pip install tsfresh

Installieren Sie tsfresh mit.

pip install pandas==0.21 

Bitte ändern Sie gerne.

Hier ist die Version, die ich benutze.

2. Bereiten Sie Pseudo-Zeitreihendaten vor

Das Auffinden mehrdimensionaler Zeitreihendaten war mühsam, daher verwenden wir dieses Mal eine Pseudotransformation des Datensatzes, die von tsfresh heruntergeladen werden kann. (Wenn Sie bereits eigene Daten haben, überspringen Sie diese bitte.)

Zunächst kann ich die Prozedur mit diesen Pseudodaten erfassen, aber das Ergebnis ist überhaupt nicht interessant. Wenn Sie also über eigene Daten verfügen, empfehle ich Ihnen, diese zu verwenden.

UEA & UCR Time Series Classification Repository Es scheint viele Zeitreihendaten zu geben, die interessant zu sein scheinen ...

Laden Sie zuerst die Daten.

In[1]



import pandas as pd
import numpy as np

from tsfresh.examples.har_dataset import download_har_dataset, load_har_dataset

download_har_dataset()
df = load_har_dataset()
print(df.shape)
df.head()

Wenn Sie mit überprüfen, können Sie sehen, dass diese Daten 7352 Abtastpunkte und 128 Variablen (128 Dimensionen) enthalten.

Schneiden Sie als Nächstes nur 100 Abtastpunkte und 50 Variablen aus.

In[2]


df = df.iloc[0:100, 0:50]
print(df.shape)
df.head()

Diesmal, "Es gibt fünf Probanden, und 10 Variablen von Zeitreihendaten werden von am Körper angebrachten Sensoren erfasst, um zu klassifizieren, ob die Probanden Kinder oder Erwachsene sind." Stellen Sie sich eine solche Situation vor.

Da der Zweck dieser Zeit darin besteht, den Fluss der Merkmalsmengenentwicklung zu durchschauen, Die Entsprechung der Werte ist durcheinander. Natürlich kann es nicht durch diese Daten klassifiziert werden.

In[3]


# id:5 und 10 Variablen

#Jeweils 10 Variablen werden jeder Person (Betreff) zugeordnet.
df_s1 = df.iloc[:,0:10].copy()
df_s2 = df.iloc[:,10:20].copy()
df_s3 = df.iloc[:,20:30].copy()
df_s4 = df.iloc[:,30:40].copy()
df_s5 = df.iloc[:,40:50].copy()

#Erstellen Sie eine Spalte mit jeder einzelnen ID als Wert.
df_s1['id'] = 'sub1'
df_s2['id'] = 'sub2'
df_s3['id'] = 'sub3'
df_s4['id'] = 'sub4'
df_s5['id'] = 'sub5'

#Schreiben Sie den Variablennamen jeder Spalte neu.
columns = ['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'id']
df_s1.columns = columns
df_s2.columns = columns
df_s3.columns = columns
df_s4.columns = columns
df_s5.columns = columns

df_s1.head()

image.png

Es gibt 5 Datenrahmen wie diesen.

3. Transformieren Sie Zeitreihendaten in einen entsprechenden Datenrahmen

Gemäß den offiziellen Dokumenten hat ** extract_features () **, die Hauptfunktion in diesem Artikel, ein Argument. Das Format für die Übergabe wird angegeben. Der Datentyp ist der Pandas-Datenrahmen-Objekttyp, es gibt jedoch drei Formate.

Die oben genannten sind die drei Typen. Dieses Mal werde ich es auf dieses erste Format formatieren.

id	time	x	y
A	t1	x(A, t1)	y(A, t1)
A	t2	x(A, t2)	y(A, t2)
A	t3	x(A, t3)	y(A, t3)
B	t1	x(B, t1)	y(B, t1)
B	t2	x(B, t2)	y(B, t2)
B	t3	x(B, t3)	y(B, t3)

Fortsetzung von früher,

In[4]


df = pd.concat([df_s1, df_s2, df_s3, df_s4, df_s5], axis=0)
print(df['id'].nunique())
df.head()

Wie, wenn verbunden,

image.png

Es wird sein. Die Anzahl der eindeutigen IDs beträgt 5, sodass sie problemlos verkettet werden können.

Sie können es jetzt an die Funktion extract_features () übergeben.

4. Extrahieren Sie Features mit extract_features ()

Für den vorherigen Datenrahmen

In[5]


from tsfresh import extract_features

df_features = extract_features(df, column_id='id')
df_features.head()

Wenn Sie sich bewerben image.png

Der Funktionsbetrag wird wie folgt berechnet. Es gibt 754 dieser Funktionen für eine Variable. Ich denke, dass es ziemlich viele gibt, aber ich denke, dass es nützlich ist, wenn Sie denken, dass die Schwierigkeit des Umgangs mit Zeitreihendaten gelöst ist.

Was jede Merkmalsmenge bedeutet, ist Die Dokumentation enthält eine Übersicht über extrahierte Funktionen (https://tsfresh.readthedocs.io/en/latest/text/list_of_features.html). Es scheint, dass die Merkmalsmenge (Statistik), für die Parameter erforderlich sind, durch mehrere Parameter berechnet wird.

5. Filtern Sie Funktionen mit select_features ()

In der Dokumentation wird nach dem Extrahieren der Features wie oben beschrieben [Filtern der Features] (https://tsfresh.readthedocs.io/en/latest/text/feature_filtering.html) wird empfohlen. Die Funktion für diese Feature-Filterung lautet ** select_features () **. Diese Funktion verwendet einen statistischen Hypothesentest, um Merkmale auszuwählen, sodass nur Merkmale, die aufgrund dieses Merkmals wahrscheinlich einen statistisch signifikanten Unterschied aufweisen.

davor,

In[6]


from tsfresh.utilities.dataframe_functions import impute

df_features = impute(df_features)

Auf diese Weise werden die nicht behandelten Werte wie NaN und unendlich in der zuvor erhaltenen Merkmalsmenge ergänzt.

Außerdem schränkt select_features () die Features basierend auf der abhängigen Variablen y ein, sodass die Daten pseudo vorbereitet werden. Dies muss pandas.Series oder numpy.array sein, wie Sie im Quellcode sehen können (https://tsfresh.readthedocs.io/en/latest/_modules/tsfresh/feature_selection/selection.html). .. Diesmal,

In[7]


from tsfresh import select_features

X = df_features
y = [0, 0, 0, 1, 1]
y = np.array(y)

Bereiten Sie einen X-Datenrahmen mit extrahierten Features und einem entsprechend zugewiesenen numpy-Array von y vor.

Und

In[8]


X_selected = select_features(X, y)
print(X_selected.shape)
X_selected

Wenn Sie das tun

Gut.

image.png

Nichts kommt brillant heraus. Das ist richtig, denn die Daten sind angemessen ... Mit den richtigen Daten sollten Sie in der Lage sein, die Funktionsmenge gut auszuwählen. (Diejenigen, die den Funktionsbetrag aus ihren eigenen Daten auswählen konnten (oder konnten), würden sich freuen zu weinen, wenn Sie uns einen Kommentar geben könnten.)

Bonus. Ich habe versucht, die Merkmalsmenge durch Hauptkomponentenanalyse (PCA) dimensional zu komprimieren.

Weil es damit endet Dieses Mal habe ich anstelle der Auswahl der Merkmalsmenge mithilfe eines statistischen Hypothesentests die Dimensionskomprimierung mit PCA versucht. Es ist so, als würde man eine Instanz namens pca erstellen, anpassen und mit dieser Instanz transformieren.

In[9]


from sklearn.decomposition import PCA
pca = PCA(n_components=4)
pca.fit(df_features)
X_PCA = pca.transform(df_features)

Wenn dies in einen Datenrahmen umgewandelt und angezeigt wird,

In[10]


X_PCA = pd.DataFrame( X_PCA )
X_PCA.head()

image.png

Es wird sein.

des Weiteren, Python: Versuchen Sie die Hauptkomponentenanalyse (PCA) mit scikit-learn Wenn Sie versuchen, den Beitragssatz / kumulierten Beitragssatz unter Bezugnahme auf zu finden

In[11]


print('Beitragssatz jeder Dimension: {0}'.format(pca.explained_variance_ratio_))
print('Kumulativer Beitragssatz: {0}'.format(sum(pca.explained_variance_ratio_)))

out[11]


Beitragssatz jeder Dimension: [0.30121012 0.28833114 0.22187195 0.1885868 ]
Kumulativer Beitragssatz: 0.9999999999999999

Es wird sein. vielleicht, Möglicherweise können die Features mit PCA komprimiert werden, anstatt die Features auszuwählen.

Obwohl es ein Machtspiel ist, scheint es, wenn Sie diese Reihe von Flows verwenden, dass Sie dem Ärger entkommen können, der für die Zeitreihe einzigartig ist.

Von dort [Kaggle] Basismodellkonstruktion, Pipeline-Verarbeitung Sie können verschiedene Dinge tun, z. B. ein Basismodell wie dieses erstellen.

Als nächstes werde ich es mit tatsächlichen mehrdimensionalen Zeitreihendaten versuchen.

Recommended Posts

[Kaggle] Ich habe versucht, mithilfe von tsfresh das Feature-Quantity-Engineering mehrdimensionaler Zeitreihendaten durchzuführen
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Differenzierung von Zeitreihendaten (diskret)
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
[Kaggle] Ich habe versucht, mit unausgeglichenem Lernen zu unterabtasten
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
Ich habe versucht, Zeitreihen zu analysieren! (AR-Modell)
[Kaggle] Ich habe versucht, Ensemble mit LightGBM zu lernen
[Für Anfänger] Skript innerhalb von 10 Zeilen (5. Resample von Zeitreihendaten mit Pandas)
Ich habe versucht, eine Clusteranalyse von Kunden anhand von Kaufdaten durchzuführen
Erfassung von Zeitreihendaten (täglich) von Aktienkursen
Glättung von Zeitreihen und Wellenformdaten 3 Methoden (Glättung)
Zeigen Sie Details zu Zeitreihendaten mit Remotte an
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe DBM mit Pylearn 2 unter Verwendung künstlicher Daten ausprobiert
[Neueste Methode] Visualisierung von Zeitreihendaten und Extraktion häufiger Muster mithilfe des Pan-Matrix-Profils
Abnormalitätserkennung von Zeitreihendaten durch LSTM (Keras)
Ich habe versucht, EKG-Daten mit der K-Shape-Methode zu gruppieren
Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.
Ich habe versucht, Python (3) anstelle eines Funktionsrechners zu verwenden
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
Ich habe die gleiche Datenanalyse mit kaggle notebook (python) und PowerBI gleichzeitig versucht ②
Ich habe versucht, die Genauigkeit von Modellen für maschinelles Lernen mit Kaggle als Thema zu vergleichen.
Ich habe die gleiche Datenanalyse mit kaggle notebook (python) und PowerBI gleichzeitig versucht ①
Ich habe versucht, Videos mit der Youtube Data API (Anfänger) zu suchen.
Ich habe versucht, das CNN-Modell von TensorFlow mit TF-Slim umzugestalten
Ich habe versucht, das Lachproblem mit Keras zu erkennen.
Bibliothek tsfresh, die Features automatisch aus Zeitreihendaten extrahiert
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
Eine Geschichte über das Clustering von Zeitreihendaten des Austauschs
Ich habe versucht, die handschriftliche Zeichenerkennung von Runenzeichen mit CNN mithilfe von Keras zu erkennen
Ich habe versucht, scRNA-seq-Daten mithilfe der topologischen Datenanalyse (TDA) zu analysieren.
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Ich habe versucht, PDF-Daten der medizinischen Online-Versorgung zu verwenden, die auf der Ausbreitung einer neuen Coronavirus-Infektion basieren
[Ich habe versucht, Pythonista 3 zu verwenden] Einführung