Plot Clusters y clasificación de KMeans para datos unidimensionales
Estoy usandoKMeans
para agrupar los tres conjuntos de datos de series temporales con diferentes caracteres. Por razones de reproducibilidad, estoy compartiendo los datosaqu.
Aquí está mi código
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
protocols = {}
types = {"data1": "data1.csv", "data2": "data2.csv", "data3": "data3.csv"}
for protname, fname in types.items():
col_time,col_window = np.loadtxt(fname,delimiter=',').T
trailing_window = col_window[:-1] # "past" values at a given index
leading_window = col_window[1:] # "current values at a given index
decreasing_inds = np.where(leading_window < trailing_window)[0]
quotient = leading_window[decreasing_inds]/trailing_window[decreasing_inds]
quotient_times = col_time[decreasing_inds]
protocols[protname] = {
"col_time": col_time,
"col_window": col_window,
"quotient_times": quotient_times,
"quotient": quotient,
}
k_means = KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
n_clusters=3, n_init=10, n_jobs=None, precompute_distances='auto',
random_state=0, tol=0.0001, verbose=0)
k_means.fit(quotient.reshape(-1,1))
e esta manera, dado un nuevo punto de datos (conquotient
yquotient_times
), Quiero saber quécluster
pertenece al construir cada conjunto de datos apilando estas dos características transformadasquotient
yquotient_times
conKMeans
.
k_means.labels_
da esta salidaarray([1, 1, 0, 1, 2, 1, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0], dtype=int32)
Finalmente, quiero visualizar los grupos usandoplt.plot(k_means, ".",color="blue")
pero recibo este error:TypeError: float() argument must be a string or a number, not 'KMeans'
. ¿Cómo trazamosKMeans
grupos?