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