首页 > 解决方案 > 具有> 3个特征的分层凝聚聚类

问题描述

介绍

我试图确认我对 python 中的层次凝聚聚类如何工作的理解确实是正确的。因此,对于我有 MxN(M = 行和 N = 列)的 panda DataFrame,其中 M 是正在测量的特征,N 是患者。

就我而言,我有83 个特征 (m1, m2,...,m83)6 个患者 (n1,n2,..,n6)。因此,对于每个患者,我测量了 83 个特征,我感兴趣的是,对于每个患者,哪些特征被过度代表和代表不足,以及根据这些特征的表示将患者分组在一起。因此,我通过使用 Seaborn 包执行层次凝聚聚类输出带有关联树状图的热图来做到这一点。

因此,大多数示例通常包括一个 MxN 矩阵,其中 N=2 且 M 可以是任意大小。在这种情况下,这将在图中表示为我们的两列是我们在二维图中的 x,y 坐标。添加一个额外的患者/列将在我的坐标系中添加一个额外的 z 参数,从而生成一个 3 维图,其中每个患者/列的坐标为 x、y、z,用于测量的所有 M 个特征。

熊猫数据框的示例。

仅预览第一和最后 3 行和列。

(pdb) 特征_df

       Patient1   Patient2  Patient3   Patient4   Patient5   Patient6

Feature1   4.686681   1.718879  0.772530   2.085830   2.755356   2.549348

Feature2   1.605639   1.098595  0.000000   0.084507  19.267667   4.056351

Feature3   0.000000   0.063615  0.010603   0.000000   0.005301   0.037109
...             ...        ...       ...        ...        ...        ...
Feature81  0.213393   0.000000  0.000000   0.000000   0.106696   0.000000

Feature82  2.628437   2.813818  0.933526   2.416573   0.695179   2.078915

Feature83  0.000000   0.000000  0.000000   0.000000   0.000000   0.000000


[83 rows x 6 columns]

编码

我对所有原始值(原始值是每个特征的计数值,即频率)执行 log2 转换,因为所有原始值(在 log2 转换后变为 -inf 但被替换为 0)在热图中被屏蔽但显然包含在聚类分析中。

feature_df = pd.DataFrame(features, columns=sample_list, index=gene_expression_list)
feature_df.applymap(np.log2).replace(float('-inf'),0)
mask = feature_df.isin(values=[0])
sns.clustermap(feature_df, metric="euclidean", method="ward", 
mask=mask, cmap="Blues")
plt.show()

聚类特征的热图

问题

  1. 我的上述理解正确吗?
  2. 如果是这样,对于 > 3 维(3 名患者)的数据集,什么距离方法被认为是有效的,因为我假设欧几里德距离距离不是最有代表性的?
  3. 最后,如果我的理解是正确的,我可以看到如何创建树状图来对特征/行进行聚类,但我看不到如何创建树状图来将患者/列聚类到不同的组中。

欢迎任何意见、建议或想法。

标签: python-3.xpandasdata-sciencehierarchical-clustering

解决方案


推荐阅读