首页 > 解决方案 > 如何在不使用截止方法的情况下在python中提取、比较或选择层次聚类的子聚类?

问题描述

我正在处理时间序列,想通过两步相关分析选择重要特征,所以我们必须阈值:

  1. t1:相关性,相关性指数较高的候选保留到第二步。
  2. t2:冗余,如果两个候选者的相关指数大于 t2,则显示相互关联的相关值。

我已经完成了第一步,第二步,我根据相关指数实现了层次聚类。最小示例集的代码在这里,我想知道:

  1. 如何提取子集群并对它们进行一些操作?
  2. 我如何比较两个相似的子集群并直接被组丢弃?

前任:

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 6))
corr = spearmanr(x1).correlation
corr_linkage = hierarchy.ward(corr)
dendro = hierarchy.dendrogram(
    corr_linkage, labels=x1.columns.tolist(), ax=ax1, leaf_rotation=90
)
dendro_idx = np.arange(0, len(dendro['ivl']))

sns.heatmap(corr[dendro['leaves'], :][:, dendro['leaves']], annot=True, ax=ax2)
ax2.set_xticks(dendro_idx)
ax2.set_yticks(dendro_idx)
ax2.set_xticklabels(dendro['ivl'])
ax2.set_yticklabels(dendro['ivl'])
fig.tight_layout()
plt.show()

层次和相关矩阵 相关矩阵:

时滞 48 47 26 25 24 23 22 3 2 1
48 1.0 0.949316 0.641904 0.748311 0.787426 0.738845 0.620091 0.390607 0.539650 0.645866
47 0.949316 1.0 0.492099 0.640936 0.747712 0.787320 0.738939 0.219241 0.389361 0.538607
26 0.641904 0.492099 1.000000 0.949585 0.824432 0.653920 0.462814 0.747734 0.786795 0.738030
25 0.748311 0.640936 0.949585 1.000000 0.949505 0.823989 0.653072 0.640961 0.747452 0.786551
24 0.787426 0.747712 0.824432 0.949505 1.0 0.949327 0.823503 0.491748 0.640533 0.747164
23 0.738845 0.787320 0.653920 0.823989 0.949327 1.0 0.949252 0.322011 0.490950 0.639944
22 0.620091 0.738939 0.462814 0.653072 0.823503 0.949252 1.000000 0.152041 0.320847 0.489994
3 0.390607 0.219241 0.747734 0.640961 0.491748 0.322011 0.152041 1.000000 0.949438 0.824065
2 0.539650 0.389361 0.786795 0.747452 0.640533 0.490950 0.320847 0.949438 1.000000 0.949368
1 0.645866 0.538607 0.738030 0.786551 0.747164 0.639944 0.489994 0.824065 0.949368 1.000000
目标 0.685951 0.645312 0.619412 0.737693 0.786350 0.746902 0.639463 0.653596 0.823754 0.949250

标签: pythonscikit-learnscipycluster-analysishierarchical-clustering

解决方案


推荐阅读