我正在寻找一种在矩阵行上分别执行聚类的方法,而不是在其列上,重新排序矩阵中的数据以反映聚类并将它们放在一起 . 聚类问题很容易解决,树形图创建也是如此(例如在this blog或"Programming collective intelligence"中) . 但是,如何重新排序数据仍然不清楚 .
最后,我正在寻找一种使用朴素Python创建类似于下图的方法(使用任何"standard"库,如numpy,matplotlib等,但没有using R或其他外部工具) .
dendogram http://www2.warwick.ac.uk/fac/sci/moac/currentstudents/peter_cock/r/heatmap/no_scaling.png
Clarifications
我被问到重新排序是什么意思 . 当您首先按矩阵行将数据聚类在矩阵中时,然后通过其列,每个矩阵单元可以通过两个树形图中的位置进行标识 . 如果重新排序原始矩阵的行和列,使得在树形图中彼此靠近的元素在矩阵中彼此靠近,然后生成热图,数据的聚类可能对观察者来说变得明显(如上图所示)
3 回答
我不确定完全理解,但似乎你试图根据树形图指标的种类重新索引数组的每个轴 . 我想这假设在每个分支描述中都有一些比较逻辑 . 如果是这种情况那么这将工作(?):
x_idxs
和y_idxs
是树状图指示 .a
是未排序的矩阵 .xi
和yi
是您的新行/列数组指示 .a2
是排序矩阵,而x_idxs2
和y_idxs2
是新的,排序的树形图标记 . 这假设在创建树形图时,0
分支列/行总是比1
分支更大/更小 .如果你的y_idxs和x_idxs不是列表但是是numpy数组,那么你可以以类似的方式使用
np.argsort
.我知道现在游戏已经很晚了,但我根据本页帖子中的代码制作了一个绘图对象 . 它在pip上注册,所以要安装你只需要打电话
在这里查看项目的github页面:https://github.com/themantalope/pydendroheatmap
请参阅下面部分复制的recent answer至this related question .
Dendrogram and distance matrix http://up.stevetjoa.com/dendrogram.png