[PYTHON] tslearn Trial Memorandum

Überblick

Es gibt ein leistungsstarkes Paket namens tslearn zum Clustering von Zeitreihendaten und ein Memorandum zur Überprüfung des Vorgangs Es scheint, dass es bei der Arbeit verwendet werden kann, also esse ich ein bisschen

Erstellen einer virtuellen Conda-Umgebung zur Funktionsprüfung

Erstellen Sie eine neue virtuelle Umgebung für die Funktionsprüfung gemäß dem Verfahren in Miniconda Install Memorandum. Installieren Sie dann die folgenden erforderlichen Pakete

conda install -c conda-forge tslearn
conda install -c conda-forge h5py

Das Verfahren für tslearn auch wie geschrieben und das Folgende ist ebenfalls erforderlich. scikit-learn, numpy, scipy

Vorbereitung

tslearns Clustering implementiert die folgenden drei Methoden.

Dieses Mal werde ich eine Methode namens K-Shape verwenden. Eine Übersicht über K-Shape finden Sie in diesem Blog, von dem Sie auch auf das Originalpapier verweisen können.

Dieses Mal werde ich versuchen, arrhythmische Wellenformen basierend auf dem [offiziellen Beispielcode] von tslearn (https://tslearn.readthedocs.io/en/stable/auto_examples/clustering/plot_kshape.html?highlight=KShape) zu gruppieren. Die verwendeten Daten waren EKG-Herzschlag-Kategorisierungsdatensatz von Kaggle. Da es sich nicht um eine DNN handelt, laden Sie nur mitbih_train.csv herunter. 187 Punkte mit 125-Hz-Wellenformdaten und die letzte Spalte sind mit 0-4 gekennzeichnet. '0' ist die normale Wellenform, und ansonsten scheint es für jedes Symptom eine andere Wellenform zu geben. Insgesamt gibt es 87554 Fälle, aber mischen und verwenden Sie 100 Punkte. Reservieren Sie außerdem das Etikett, um zu bestätigen, dass das Clustering später erfolgreich war.

Code

Importieren Sie die erforderlichen Bibliotheken.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

from tslearn.clustering import KShape
from tslearn.datasets import CachedDatasets
from tslearn.preprocessing import TimeSeriesScalerMeanVariance

Formatieren Sie die Daten und skalieren Sie sie schließlich.

train_df=pd.read_csv('/home/hoge/mitbih_train.csv',header=None)
trainArr = []
trainArr = train_df.values
np.random.shuffle(trainArr)

trainArr_X = []
trainArr_y = []
trainArr_X = trainArr[:100, :187]
trainArr_y = trainArr[:100, -1:]
trainArr_X = trainArr_X.reshape([100, 187, 1])
print(trainArr_X.shape)         # (100, 187, 1)
print(trainArr_y.shape)         # (100, 1)
sz = trainArr_X.shape[1]

# For this method to operate properly, prior scaling is required
trainArr_X = TimeSeriesScalerMeanVariance().fit_transform(trainArr_X)

Führen Sie Clustering durch und zeigen Sie die Ergebnisse an. Es gab 5 Klassen.

# kShape clustering
ks = KShape(n_clusters=5, verbose=True, random_state=seed)
y_pred = ks.fit_predict(trainArr_X)

plt.figure(figsize=(10, 10), tight_layout = True)
for yi in range(5):
    plt.subplot(5, 1, 1 + yi)
    
    for xx in trainArr_X[y_pred == yi]:
        plt.plot(xx.ravel(), "b-", alpha=.2)
    plt.plot(ks.cluster_centers_[yi].ravel(), "r-")
    plt.xlim(0, sz)
    plt.ylim(-8, 8)
    plt.title("Cluster %d" % (yi + 1))

plt.show()

Ergebnis

Holen Sie sich die Abbildung unten. Die rote Linie scheint die Wellenform zu sein, die der Mitte jedes Clusters am nächsten liegt.

Screenshot from 2020-10-04 16-18-33.png

(Ich wollte unbedingt 100 Zeilen von trainArr_y für jeden Krankheitsnamen farblich kennzeichnen, konnte ihn aber aufgrund mangelnder Python-Leistung nicht sofort schreiben, daher werde ich ihn zu einem späteren Zeitpunkt unterstützen.) Die Anzahl der Beschriftungen der 100 hier verwendeten Originaldaten (unabhängig von der Clusternummer in der obigen Abbildung) ist wie folgt. '0': 86 Stück, '1': 2 Stück, '2': 4 Stück, '3': 2 Stück, '4': 6 Stück

Da die Anzahl der Beschriftungen und die Anzahl der einzelnen Klassen deutlich unterschiedlich sind, scheint es, dass sie nicht verwendet werden können, ohne etwas anzupassen. Untersuchen Sie, welche Parameter verfügbar sind. Die Rohdaten wurden in der zweiten Hälfte mit Null von 187 Punkten aufgefüllt. Ich stürzte so wie es war, aber es scheint, dass dies kein Problem war.

Der Code, der diesen Datensatz mit CNN klassifiziert, befindet sich ebenfalls in Kaggle, und die Genauigkeit ist ebenfalls hervorragend gut.

Recommended Posts

tslearn Trial Memorandum
Matplotlib Memorandum
Linux Memorandum
jinja2 Memorandum
Python-Memorandum
Django Memorandum
Python-Memorandum 2
Plotly Memorandum
Slackbot-Memorandum (1)
Test gdb
Multiprocessing Memorandum
Memorandum MetaTrader5
Pip Memorandum
Python-Memorandum
Pydoc Memorandum
Python Memorandum
Memorandum of Pandas
Python Memorandum
DjangoGirls Memorandum
Befehlsmemorandum
Python-Memorandum
Pandas Memorandum
Python Memorandum
Python-Memorandum