Plot Clusters e classificação do KMeans para dados unidimensionais
Estou usandoKMeans
para agrupar os três conjuntos de dados de séries temporais com características diferentes. Por motivos de reprodutibilidade, estou compartilhando os dadosAqu.
Aqui está meu 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))
Desta forma, dado um novo ponto de dados (comquotient
equotient_times
), Quero saber qualcluster
o qual pertence, construindo cada conjunto de dados que empilha esses dois recursos transformadoquotient
equotient_times
comKMeans
.
k_means.labels_
fornece essa saídaarray([1, 1, 0, 1, 2, 1, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0], dtype=int32)
Finalmente, quero visualizar os clusters usandoplt.plot(k_means, ".",color="blue")
mas estou recebendo este erro:TypeError: float() argument must be a string or a number, not 'KMeans'
. Como plotamosKMeans
clusters?