У меня есть набор данных, который выглядит следующим образом:
trace time counter
12 0.0 1
12 0.13 3
12 0.35 2
...
12 1.0 1
13 0.0 1
13 0.23 1
13 0.37 2
...
13 0.97 2
13 1.0 1
...
Время здесь является относительным от 0 до 1. Каждый набор строк с одинаковой трассой может быть нанесен на линейный график, который выглядит так:
Это всего лишь пример графика с 4 трассами, в данных гораздо больше. Ось X представляет время, а ось Y - счетчик. Количество точек для каждой трассы является переменным.
Я хочу сгруппировать все трассы (которые состоят из (время, счетчик) -точки) в группы и подумал сделать это с помощью tslearn.
Мой настоящий код выглядит следующим образом:
from tslearn.utils import to_time_series_dataset
import numpy
from tslearn.clustering import TimeSeriesKMeans
np_ts = []
np_cs = []
for trace in df.trace.unique():
df_trace = df.loc[df.trace == trace]
np_ts.append(df_trace.time.array)
np_cs.append(df_trace.counter.array)
np_ts = np.array(np_ts)
np_cs = np.array(np_cs)
X = to_time_series_dataset(np_ts)
Y = to_time_series_dataset(np_cs)
km = TimeSeriesKMeans(n_clusters=3, metric="dtw")
y_pred = km.fit(X, Y)
По какой-то причине это не будет работать, потому что он всегда кластеризовал все трассы в один кластер, а не в три. Это правильный способ сделать этот тип кластеризации? Мне не нужно использовать tslearn, но я подумал, что это лучшее и простое решение для этого.
Спасибо за помощь.