聚类不同长度的时间序列数据
Clustering Time Series Data of Different Length
我有不同长度的时间序列数据。我想根据 DTW 距离进行聚类,但找不到与之相关的 ant 库。 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_)
您可以尝试定制 k-means(聚类算法)或其他算法。可以在 sklearn 库中轻松获得源代码。填充确实不是一个很好的选择,因为它会改变问题本身。您也可以使用 tslearn 和 pyclustering(用于优化集群)作为替代方案,但请记住使用 DTW 距离而不是欧氏距离。
我遇到了同样的问题,因为我的数据长度不一样。我在每个系列的末尾使用零来获得最大长度。我用数据测试了一些集群类型,与其他类型相比,"partitional" 的效果出奇地好。我不是专家,但这足以满足我的需求。
如果您找到更好的方法,请告诉我。
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
)
我有不同长度的时间序列数据。我想根据 DTW 距离进行聚类,但找不到与之相关的 ant 库。 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_)
您可以尝试定制 k-means(聚类算法)或其他算法。可以在 sklearn 库中轻松获得源代码。填充确实不是一个很好的选择,因为它会改变问题本身。您也可以使用 tslearn 和 pyclustering(用于优化集群)作为替代方案,但请记住使用 DTW 距离而不是欧氏距离。
我遇到了同样的问题,因为我的数据长度不一样。我在每个系列的末尾使用零来获得最大长度。我用数据测试了一些集群类型,与其他类型相比,"partitional" 的效果出奇地好。我不是专家,但这足以满足我的需求。
如果您找到更好的方法,请告诉我。
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
)