python-3.x - 具有> 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()
问题
- 我的上述理解正确吗?
- 如果是这样,对于 > 3 维(3 名患者)的数据集,什么距离方法被认为是有效的,因为我假设欧几里德距离距离不是最有代表性的?
- 最后,如果我的理解是正确的,我可以看到如何创建树状图来对特征/行进行聚类,但我看不到如何创建树状图来将患者/列聚类到不同的组中。
欢迎任何意见、建议或想法。
解决方案
推荐阅读
- testing - 为什么 TestCafe 在使用简单的命令行启动测试 Electron 应用程序时会崩溃?
- azure-devops - 我可以将 Azure Pipelines 指向 TFS 构建吗?
- javascript - 不同浏览器输入的maxLength默认值
- wordpress - 如何自定义 Wordpress 编辑帖子页面
- java - 如何从 eof 中避免 Scanner 并让他活着
- swift - 当应用程序被强制关闭时,我的应用程序 open_counter 会重置
- pandas - pandas 根据 2 个变量值有条件地删除行
- php - 如何用php编辑json文件
- amazon-cloudformation - cloudformation 模板中没有输出部分
- javascript - 收到此错误:无法读取未定义的属性“0”