使用 DTW 距离矩阵的凝聚聚类

Posted

技术标签:

【中文标题】使用 DTW 距离矩阵的凝聚聚类【英文标题】:Agglomerative clustering using DTW distance matrix 【发布时间】:2019-02-05 05:36:16 【问题描述】:

我正在尝试对时间序列数据集进行聚类。为此,我计算了成对的 DTW 距离。这些数据收集在一个距离矩阵中,我想将其用作 AgglomerativeClustering() sklearn 方法的输入。

看来我需要使用压缩距离矩阵。但如果我这样做,聚类方法会将每个距离解释为一个新样本,因此我得到的标签太多。我应该如何正确地做到这一点?

这是我尝试过的示例代码:

import numpy as np

# Test symmetric matrix
N = 4
b = np.random.randint(0,5,size=(N,N))
b_symm = (b + b.T)/2
np.fill_diagonal(b_symm,np.zeros(N))

# Condensed matrix
condensed = squareform(b_symm)
model = AgglomerativeClustering(n_clusters=2, linkage=linkage)
y = model.fit_predict(condensed.reshape(-1,1))

【问题讨论】:

您有使用压缩距离矩阵的理由吗?你可以很容易地squareform它到一个正常的距离矩阵 【参考方案1】:

请参阅文档:

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.AgglomerativeClustering.html

affinity:字符串或可调用,默认:“euclidean”

用于计算链接的度量。可以是“euclidean”、“l1”、“l2”、“manhattan”、“cosine”或“precomputed”。如果链接是“ward”,则只接受“euclidean”。

【讨论】:

以上是关于使用 DTW 距离矩阵的凝聚聚类的主要内容,如果未能解决你的问题,请参考以下文章

sklearn 具有距离链接准则的凝聚聚类

使用 dtwclust 进行动态时间规整距离 (DTW) 的时间序列聚类

凝聚聚类和分裂聚类最终能得到相同的结果吗?

凝聚聚类层次可视化

Scikit-learn 凝聚聚类连接矩阵

如何根据集群之间的距离阈值来决定集群的数量,以便使用 sklearn 进行凝聚聚类?