Implementierung der Clustering-K-Form-Methode für Zeitreihendaten [Unüberwachtes Lernen mit Python Kapitel 13]

Was ist in diesem Artikel zu tun?

** - Implementierung der Klassifizierung von Zeitreihendaten nach k-Form --Verwenden Sie Elektrokardiogrammdaten für Daten **

Einführung

Die k-Form-Methode wird häufig als Methode zur Klassifizierung von Zeitreihendaten verwendet. In diesem Artikel verwenden wir die k-Form-Methode, um EKG-Daten zu gruppieren. Daten und Code ["Unüberwachtes Lernen mit Python"](URL https://www.amazon.co.jp/Python%E3%81%A7%E3%81%AF%E3%81%98%E3%82 % 81% E3% 82% 8B% E6% 95% 99% E5% B8% AB% E3% 81% AA% E3% 81% 97% E5% AD% A6% E7% BF% 92-% E2% 80% 95% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92% E3% 81% AE% E5% 8F% AF% E8% 83% BD% E6% 80% A7% E3% 82% 92% E5% BA% 83% E3% 81% 92% E3% 82% 8B% E3% 83% A9% E3% 83% 99% E3% 83% AB% E3% 81% AA% E3% 81% 97% E3% 83% 87% E3% 83% BC% E3% 82% BF% E3% 81% AE% E5% 88% A9% E7% 94% A8-Ankur-Patel / dp / 4873119103) Ich darf.

Zu behandelnde Daten

Verwenden Sie das UCR Time Series Classification Archive der University of California, Riverside. https://www.cs.ucr.edu/~eamonn/time_series_data/

EKG5000 wird verwendet. Das Passwort lautet [Klassifizierungsversuch].

Bibliothek importieren

Dies ist ein Nachschlagewerk. Einige von ihnen werden in diesem Artikel nicht behandelt.

Die Installation ist erforderlich, wenn Sie mit colab arbeiten.

python


!pip install kshape
!pip install tslearn

python



'''Main'''
import numpy as np
import pandas as pd
import os, time, re
import pickle, gzip, datetime
from os import listdir, walk
from os.path import isfile, join

'''Data Viz'''
import matplotlib.pyplot as plt
import seaborn as sns
color = sns.color_palette()
import matplotlib as mpl
from mpl_toolkits.axes_grid1 import Grid

%matplotlib inline

'''Data Prep and Model Evaluation'''
from sklearn import preprocessing as pp
from sklearn.model_selection import train_test_split 
from sklearn.model_selection import StratifiedKFold 
from sklearn.metrics import log_loss, accuracy_score
from sklearn.metrics import precision_recall_curve, average_precision_score
from sklearn.metrics import roc_curve, auc, roc_auc_score, mean_squared_error
from keras.utils import to_categorical
from sklearn.metrics import adjusted_rand_score
import random

'''Algos'''
from kshape.core import kshape, zscore
import tslearn
from tslearn.utils import to_time_series_dataset
from tslearn.clustering import KShape, TimeSeriesScalerMeanVariance
from tslearn.clustering import TimeSeriesKMeans
import hdbscan

sns.set("talk")

Daten lesen

Als nächstes werden die Daten gelesen. Es gibt 4000 Zeitreihendaten, und die Daten werden in 5 Cluster klassifiziert.

python


#Daten lesen
current_path = os.getcwd()
file = os.path.sep.join(["",'data', 'datasets', 'ucr_time_series_data', '']) #Schreiben Sie entsprechend dem persönlichen Ordner neu
data_train = np.loadtxt(current_path+file+
                        "ECG5000/ECG5000_TRAIN", 
                        delimiter=",")

data_test = np.loadtxt(current_path+file+
                       "ECG5000/ECG5000_TEST", 
                       delimiter=",")

data_joined = np.concatenate((data_train,data_test),axis=0)
data_train, data_test = train_test_split(data_joined, 
                                    test_size=0.20, random_state=2019)

X_train = to_time_series_dataset(data_train[:, 1:])
y_train = data_train[:, 0].astype(np.int)
X_test = to_time_series_dataset(data_test[:, 1:])
y_test = data_test[:, 0].astype(np.int)

#Datenstruktur anzeigen
print("Number of time series:", len(data_train))
print("Number of unique classes:", len(np.unique(data_train[:,0])))
print("Time series length:", len(data_train[0,1:]))

# Calculate number of readings per class
print("Number of time series in class 1.0:", 
      len(data_train[data_train[:,0]==1.0]))
print("Number of time series in class 2.0:", 
      len(data_train[data_train[:,0]==2.0]))
print("Number of time series in class 3.0:", 
      len(data_train[data_train[:,0]==3.0]))
print("Number of time series in class 4.0:", 
      len(data_train[data_train[:,0]==4.0]))
print("Number of time series in class 5.0:", 
      len(data_train[data_train[:,0]==5.0]))

"""
Number of time series: 4000
Number of unique classes: 5
Time series length: 140
Number of time series in class 1.0: 2327
Number of time series in class 2.0: 1423
Number of time series in class 3.0: 75
Number of time series in class 4.0: 156
Number of time series in class 5.0: 19
"""

Datenvisualisierung

Visualisieren Sie Daten der Klasse 1-5. Selbst wenn Sie sich einen Amateur ansehen, können Sie den Unterschied nicht erkennen.

python



fig, ax = plt.subplots(5,5,figsize=[30,10],sharey=True)

ax_f = ax.flatten()

#Grundstück der Klasse 1-5
df_train = pd.DataFrame(data_train)

cnt = 0
for class_i in range(1,6):
  df_train_plot = df_train[df_train[0] == class_i]
  for i in range(0,5):
      ax_f[cnt].set_title("class: {}".format(class_i))
      ax_f[cnt].plot(df_train_plot.iloc[i][1:])
      cnt += 1

image.png

Klassifizierung nach k-Form

Implementierung der k-Form und deren Bewertung. Zur Bewertung wird eine Methode namens "Anpassungslandmethode" verwendet. Je näher sie an 1 liegt, desto höher ist die Genauigkeit der Clusterbildung.

python


#k-shape
ks = KShape(n_clusters=5,max_iter=100,n_init=100,verbose=0)
ks.fit(X_train)

#Bewertung nach der angepassten Landmethode
#Sehen Sie, wie gut es mit dem tatsächlichen Etikett übereinstimmt
#Je näher es an 1 liegt, desto prädiktiver ist das Clustering.

preds=ks.predict(X_train)
ars = adjusted_rand_score(data_train[:,0],preds)
print("train Adjusted Rand Index:",ars)

preds_test=ks.predict(X_test)
ars = adjusted_rand_score(data_test[:,0],preds)
print("test Adjusted Rand Index:",ars)
UCR Time Series Classification Archive

Darüber hinaus wird die Klassenverteilung für jeden Cluster unten angezeigt. Da die Verteilung voreingenommen ist, ist das Clustering ziemlich gut.

Es ist jedoch zu beachten, dass die Aufteilung nicht so ist, dass die Zahl 3,4,5 die größte ist.

python



#Verteilungsvisualisierung innerhalb des Clusters
preds_test = preds_test.reshape(1000,1)
preds_test = np.hstack((preds_test,data_test[:,0].reshape(1000,1)))
preds_test = pd.DataFrame(data=preds_test)
preds_test = preds_test.rename(columns={0: 'prediction', 1: 'actual'})

counter = 0
for i in np.sort(preds_test.prediction.unique()):
    print("Predicted Cluster ", i)
    print(preds_test.actual[preds_test.prediction==i].value_counts())
    print()
    cnt = preds_test.actual[preds_test.prediction==i] \
                        .value_counts().iloc[1:].sum()
    counter = counter + cnt
print("Count of Non-Primary Points: ", counter)

"""
Predicted Cluster  0.0
2.0    29
4.0     2
1.0     2
3.0     2
5.0     1
Name: actual, dtype: int64

Predicted Cluster  1.0
2.0    270
4.0     14
3.0      8
1.0      2
5.0      1
Name: actual, dtype: int64

Predicted Cluster  2.0
1.0    553
4.0     16
2.0      9
3.0      7
Name: actual, dtype: int64

Predicted Cluster  3.0
2.0    35
1.0     5
4.0     5
5.0     3
3.0     3
Name: actual, dtype: int64

Predicted Cluster  4.0
1.0    30
4.0     1
3.0     1
2.0     1
Name: actual, dtype: int64

Count of Non-Primary Points:  83
"""

Am Ende

In diesem Artikel haben wir k-shape implementiert, eine Clustering-Methode für Zeitreihendaten. Es ist ziemlich ähnlich zu k-means. Ich denke, es wird für die Signalverarbeitung und die Erkennung von Anomalien nützlich sein.

Wenn Sie es hilfreich finden, wäre es ermutigend, wenn Sie LGTM verwenden könnten.

Recommended Posts

Implementierung der Clustering-K-Form-Methode für Zeitreihendaten [Unüberwachtes Lernen mit Python Kapitel 13]
Überwachtes Lernen von Mnist in der vollständig verbundenen Ebene, Clustering und Bewertung der letzten Phase
Implementierung der Clustering-K-Form-Methode für Zeitreihendaten [Unüberwachtes Lernen mit Python Kapitel 13]
Klassifizieren Sie Mnist-Zahlen nach Keras, ohne dass der Lehrer etwas lernt [Auto Encoder Edition]
Lernen von Beziehungsdaten mit Numpy und NetworkX (Spektralclustering)
Unbeaufsichtigtes Lernen 2 nicht hierarchisches Clustering
Zeichnen Sie die CSV von Zeitreihendaten mit einem Unixtime-Wert in Python (matplotlib).
Deep Learning von Grund auf neu Die Theorie und Implementierung des mit Python erlernten Deep Learning Kapitel 3
Richten Sie die Anzahl der Stichproben zwischen Datenklassen für maschinelles Lernen mit Python aus
Vorhersage der Zielzeit eines vollständigen Marathons mit maschinellem Lernen - Visual: Visualisierung von Daten mit Python-
Python für die Datenanalyse Kapitel 4
Python für die Datenanalyse Kapitel 2
Python: Unüberwachtes Lernen: Nicht hierarchisches Clustering
Python für die Datenanalyse Kapitel 3
Empfehlungssystem mit Matrixzerlegung [Unüberwachtes Lernen mit Python Kapitel 10]
Eine Geschichte über das Clustering von Zeitreihendaten des Austauschs
So extrahieren Sie Funktionen von Zeitreihendaten mit PySpark Basics
Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
Informationen zur Lernmethode mit Originaldaten von CenterNet (Objekte als Punkte)
Multi Layer Perceptron für Deep Learning (Deep Learning mit Python; MPS Yokohama Deep Learning Series)
Differenzierung von Zeitreihendaten (diskret)
Implementierung der Dyxtra-Methode durch Python
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Schreiben Sie den Felderstellungsknoten von SPSS Modeler mit Python neu. Merkmalsextraktion aus Zeitreihensensordaten
[Für Anfänger] Skript innerhalb von 10 Zeilen (5. Resample von Zeitreihendaten mit Pandas)
Quellcode für die Trennung von Tonquellen (Übungsreihe zum maschinellen Lernen), der mit Python gelernt wurde
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 13 Grundlagen des neuronalen Netzwerks
Python-Lernnotiz für maschinelles Lernen von Chainer bis zum Ende von Kapitel 2
Python vs Ruby "Deep Learning von Grund auf neu" Kapitel 4 Implementierung der Verlustfunktion
Vorhersage von Zeitreihendaten durch Simplex-Projektion
Implementierung und Experiment der konvexen Clustering-Methode
Vorhersage von Zeitreihendaten mit einem neuronalen Netzwerk
[Python] Beschleunigt das Laden von Zeitreihen-CSV
[Shakyo] Begegnung mit Python zum maschinellen Lernen
Erkennung von Zeitreihendatenanomalien für Anfänger
Empfehlung von Altair! Datenvisualisierung mit Python
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
Umgang mit Zeitreihendaten (Implementierung)
Formatieren und Anzeigen von Zeitreihendaten mit verschiedenen Maßstäben und Einheiten mit Python oder Matplotlib
Python-Übungsdatenanalyse Zusammenfassung des Lernens, dass ich ungefähr 10 mit 100 Schlägen getroffen habe
Python vs Ruby "Deep Learning von Grund auf neu" Kapitel 3 Implementierung eines dreischichtigen neuronalen Netzwerks
Erstellen Sie mit Python + Plotly eine animierte Zeitreihenkarte des Infektionsstatus des Corona-Virus
Ein Memorandum of Method, das häufig bei der Analyse von Daten mit Pandas verwendet wird (für Anfänger)
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
Holen Sie sich mit Python Zeitreihendaten von k-db.com
Die Geschichte, dass die Lernkosten von Python niedrig sind
Zusammenfassung der Kaggle-Kernel-Methode [Tabelle Zeitreihendaten]
Erfassung von Zeitreihendaten (täglich) von Aktienkursen
Verwenden Sie vorerst Logger mit Python
[Python] Sammeln Sie Bilder mit Icrawler für maschinelles Lernen [1000 Blatt]
Glättung von Zeitreihen und Wellenformdaten 3 Methoden (Glättung)
TRIE-Baumimplementierung mit Python und LOUDS
[Implementierung zum Lernen] Implementieren Sie Stratified Sampling in Python (1)
Ich habe mit der maschinellen Vorverarbeitung von Python Data begonnen
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 4 [Verbesserung der Erkennungsgenauigkeit durch Erweiterung der Daten]
Implementierung eines Deep Learning-Modells zur Bilderkennung
[Hikari-Python] Kapitel 09-01 Klassen (Grundlagen von Objekten)
Der erste Schritt des maschinellen Lernens ~ Für diejenigen, die versuchen möchten, mit Python zu implementieren ~
[Übersetzung] scikit-learn 0.18 Tutorial Statistisches Lernen Tutorial für die wissenschaftliche Datenverarbeitung Unbeaufsichtigtes Lernen: Suche nach Datendarstellung
Erstellen Sie einen API-Server, um den Betrieb der Front-Implementierung mit Python3 und Flask zu überprüfen
[Neueste Methode] Visualisierung von Zeitreihendaten und Extraktion häufiger Muster mithilfe des Pan-Matrix-Profils
"Abrufen von Zeitreihendaten von k-db.com mit Python" Memo zur Erstellung der Programmumgebung
Clustering-Methode Clustering
[Python] Implementierung von Clustering mit einem gemischten Gaußschen Modell