聚类不同长度的时间序列数据

时间:2019-06-06 13:17:52

标签: time-series cluster-analysis k-means

我有不同长度的时间序列数据。我想基于DTW距离进行聚类,但是找不到与此有关的蚂蚁库。 sklearn给出直截了当的错误,而tslearn kmeans给出了错误的答案。

我的问题是解决是否用零填充,但是不确定在群集时填充时间序列数据是否正确。

欢迎提出有关时间序列数据的其他聚类技术的建议。

max_length = 0

for i in train_1:
    if(len(i)>max_length):
        max_length = len(i)
print(max_length)

train_1 = sequence.pad_sequences(train_1, maxlen=max_length)
km3 = TimeSeriesKMeans(n_clusters = 4, metric="dtw",verbose = False,random_state = 0).fit(train_1)

print(km3.labels_)

2 个答案:

答案 0 :(得分:2)

您可以尝试定制k均值(聚类算法)或其他方法。可以在sklearn库中轻松获得源代码。填充实际上不是一个很好的选择,因为它将改变问题本身。您也可以使用tslearn和pyclustering(用于最佳聚类)作为替代方案,但请记住使用DTW距离而不是欧几里得距离。

答案 1 :(得分:-1)

我遇到了同样的问题,因为我的数据长度不一样。我在每个系列的末尾使用零来获得最大长度。我用数据测试了几种聚类类型,与其他类型相比,“分区”的表现出奇地好。我不是专家,但这足以满足我的需求。

如果您找到更好的方法,请告诉我。

data_clusters_results <-
  tsclust(
    series = data_ts_,
    type = "partitional", ## options: "partitional", "hierarchical", 'fuzzy'
    k = 2:max_clusters,
    preproc = NULL,
    distance = "gak", ## options: "dtw", "dtw2", "dtw_basic", "gak"
    trace = TRUE
  )