Кластеризация временных рядов с переменной длиной трасс (tslearn) - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть набор данных, который выглядит следующим образом:

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. Каждый набор строк с одинаковой трассой может быть нанесен на линейный график, который выглядит так:
enter image description here

Это всего лишь пример графика с 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, но я подумал, что это лучшее и простое решение для этого.

Спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...