python中使用DTW距离的凝聚层次聚类

数据挖掘 机器学习 Python 聚类 时间序列
2022-02-17 07:29:05

我是数据科学和 python 的新手。我有一个时间相关样本的数据集,我想对它们运行凝聚层次聚类。我发现动态时间规整 (DTW) 是一种有用的方法来查找两个时间序列之间的对齐,这两个时间序列可能在时间或速度上有所不同。

dtw_stdmlpy图书馆scipy.cluster.hierarchy中找到了SciPy,以便对我的数据进行聚类。

scipy docs,我发现我可以使用我的自定义距离函数:

metric : str or function, optional 在 y 是观察向量集合的情况下使用的距离度量;否则忽略。有关有效距离度量的列表,请参阅 pdist 函数。也可以使用自定义距离函数。

但我坚持匹配这些信息来实现聚类。

我的数据集采用dataframe每行对应一个样本的格式。

这是我的问题:

1-如何为链接功能提供距离矩阵?

2-如何设置我的自定义距离功能?

import pandas as pd
import scipy.cluster.hierarchy as hac
import mlpy

dataset = pd.read_csv ( "dataset.csv",encoding='utf-8' )
X # distance matrics
Z = hac.linkage(X, metrics=mlpy.dtw_std, method='average')
cluster = hac.fcluster(Z, t=100, criterion='maxclust')
leader = hac.leaders(Z, t=100, criterion='maxclust')


fig = plt.figure(figsize=(25, 10))
dn = dendrogram(Z)
plt.show()

编辑:

这是我计算距离矩阵的方法,然后将其传递给链接:

# computing distance matrix
dm = pdist ( dataset ,lambda u,v: mlpy.dtw_std ( pd.Series(u).dropna().values.tolist(),pd.Series(v).dropna().values.tolist(),dist_only=True ))
z = hac.linkage(dm, method='average')
cluster = hac.fcluster(z, t=100, criterion='maxclust')
leader = scipy.cluster.hierarchy.fcluster(z, t=100, criterion='maxclust')
1个回答

使用预先计算的距离矩阵,并且distance="precomputed"

无论如何,HAC 都会计算距离矩阵。