python - 如何在不使用截止方法的情况下在python中提取、比较或选择层次聚类的子聚类?
问题描述
我正在处理时间序列,想通过两步相关分析选择重要特征,所以我们必须阈值:
- t1:相关性,相关性指数较高的候选保留到第二步。
- t2:冗余,如果两个候选者的相关指数大于 t2,则显示相互关联的相关值。
我已经完成了第一步,第二步,我根据相关指数实现了层次聚类。最小示例集的代码在这里,我想知道:
- 如何提取子集群并对它们进行一些操作?
- 我如何比较两个相似的子集群并直接被组丢弃?
前任:
从子集群(1,2)我想选择与目标更相关的'如果(1,目标)>(2,目标)选择1,否则选择2。
subcluster(25,24) 与 (48,47) 相似,因此请选择其集群的相关性得分高于另一个子组的一个子集群
- 优先级是不要使用截止,因为它会迫使您手动继续到流程结束。
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 |
解决方案
推荐阅读
- javascript - 有条件地访问值的更好方法
- python - 我的代码有什么问题?我可以在我的 vscode 上运行这个很好,但它不能在 heroku 上运行,问题来自这个代码
- python - 按特定日期条件过滤 Pandas DataFrame 中的行
- merge - 按 ID 合并两个 SAS 数据集
- asp.net-core - 在 ASP.NET Core 中,应用程序可以在不做 IO 的情况下向自己生成新的请求吗?
- firebase - 如何在 Firebase Analytics 中创建自定义维度
- r - R:将数据框拆分为具有列名的工作簿/工作表
- macos - 如何添加或更改 ssh 密钥默认位置?
- javascript - 从另一张表中提取数据后如何反转谷歌表中列的顺序
- r - glmmTMB 出错无法调用 FreeAdFunObject?