如何在MATLAB

时间:2017-03-06 12:56:02

标签: matlab dendrogram

我在MATLAB中使用了连接算法的输出Z.

输出Z的结构在此链接https://uk.mathworks.com/help/stats/linkage.html(向下滚动到输出)

中给出

我试图找到树状图的内部节点和叶子的谱系。族谱被定义为将叶i(内部节点α_h)连接到根α_1的有序内部节点集。我还希望能够找到父节点 - 这是v的节点w,其中w在从根到v的路径上紧接着v。是否有人愿意解释如何使用MATLAB执行此操作?

如果我的定义不够清楚,图像中会显示一个示例案例。

Example

叶3的谱系是G(3)= {α_7,α_2,α_1},内部节点α_7的谱系是G(α_7)= {α_7,α_2,α_1}。父母的一个例子:α_7的父节点是α_2,我将其表示为g(α_2)=α_7。我知道给定来自层次聚类的输出Z的树的索引与图像不同,因此与树形图由Z索引的方式一致的代码是绝对正常的。我只关心树形图的输出是否正确。

我希望现在更清楚我希望代码能够找到并使用Z的输入。我非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

一个小例子让事情变得更加清晰:

X = [1,2,4,5,8]';    
D = pdist(X);
L = linkage(D, 'ward');
dendrogram(L, 'labels', cellfun(@num2str, num2cell(X), 'uniform', false));

如果使用

将第四列添加到L中
L(:, end+1) = (size(L, 1) + (1 : size(L, 1)));

然后L的每一行都有条目["节点数","节点数#34;"级别&#34合并;"数字父母"]。

因此根节点始终为L(结束,结束),离开节点的数量最大为(X,1),内部节点的数量大于大小(X,1)。

在你的例子中,L大致如下:

L = [...
    9, 10, 1, 10; % 10 = alpha_9
    5,  6, 2, 11; % 11 = alpha_8
    3,  4, 3, 12; % 12 = alpha_7
    1,  2, 4, 13; % 13 = alpha_6
    7, 12, 5, 14; % 14 = alpha_5
    8, 15, 6, 15; % 15 = alpha_4
   16, 11, 7, 16; % 16 = alpha_3
   14, 13, 8, 17; % 17 = alpha_2
   18, 17, 9, 18; % 18 = alpha_1
   ];
dendrogram(L);

请注意,标签已经通过构造正确。