使用树形图可视化层次聚类中的最低节点

时间:2017-07-26 19:56:58

标签: matlab dendrogram

我使用linkage为大约5000个实例的数据集生成凝聚层次聚类。我想想象一下'底部'在层次结构中合并,即靠近具有最小距离度量的叶子的节点。

不幸的是,dendrogram可视化效果更倾向于显示“{3}}顶部'算法中最后一次合并的节点。默认情况下,它显示前30个节点,折叠树的底部。我可以更改P值以显示更多节点,但我必须显示所有5000+以查看聚类的最低级别,此时该图不再可读。

MCVE

例如,从linkage documentation example

开始
openExample('stats/CompareClusterAssignmentsToClustersExample')
run CompareClusterAssignmentsToClustersExample
dendrogram(Z, 'Orient', 'Left', 'Labels', species);

生成可见前30个节点的树形图。带有数字标签的节点正在折叠树的较低层。

Dendrogram with collapsed lower levels

我可以增加可见节点的数量,以便以可读性为代价来包含所有叶子。

dendrogram(Z, size(Z,1), 'Orient', 'Left', 'Labels', species);

Dendrogram with all leaves

我喜欢什么

我真正喜欢的是上面的放大版本,如下面的示例,但显示了前30个最接近的群集。

Zoom of dendrogram with all leaves

我尝试过什么

我尝试使用Z的前30行提供函数,

dendrogram(Z(1:30), 'Orient', 'Left');

但是这会引发"指数超过矩阵维度。"当其中一行引用行中的集群时出现错误> 30.

我也尝试使用树形图Reorder属性,但是我很难找到一个有效的排序,从最近到最远的顺序对集群进行排序。

%The Z matrix is in order from closest cluster to furthest, 
% so I can use it to create an ordering
Y = reshape(Z(:, 1:2)', 1, [])
Y = Y(Y<151);
dendrogram(Z, 30, 'Orient', 'Left', 'Labels', species, 'Reorder', Y);

我收到错误

  

在请求的节点排序中,属于某些数据点   图中的相同叶子由属于的点分开   其他叶子。尝试使用不同的顺序。

如果计算整个树是因为存在分支交叉,那么这种排序可能是不可能的,但我希望如果我只看一部分树和更高级别的集群不被考虑。

问题

如何改进可视化以在树形图中显示最低级别的聚类?

0 个答案:

没有答案