如何从 MATLAB 中的树状图中查找祖先节点和父节点
How to find the ancestor and parent nodes from a dendrogram in MATLAB
我有来自 MATLAB 中 linkage 算法的输出 Z。
输出 Z 的结构在此 link https://uk.mathworks.com/help/stats/linkage.html(向下滚动到输出)
我正在尝试查找树状图的内部节点和叶子的谱系。谱系定义为连接叶 i(内部节点 α_h)和根 α_1 的有序内部节点集。我还希望能够找到父节点 - 这是 v 的节点 w,其中 w 在从根到 v 的路径上紧跟在 v 之前。有人愿意解释我如何使用 MATLAB 做到这一点吗?
如果我的定义不够清楚,图中显示了一个示例。
叶子3的系谱为G(3)={α_7,α_2,α_1},内部节点α_7的系谱为G(α_7)={α_7,α_2,α_1}。父节点的例子:α_7的父节点是α_2,记为g(α_2)=α_7。我知道给定层次聚类的输出 Z 的树索引与图像不同,因此与树状图由 Z 索引的方式一致的代码绝对没问题。我只关心树状图的输出是否正确。
我希望现在我希望代码使用 Z 的输入查找和执行的操作更加清楚。非常感谢您的帮助!
一个小例子让事情更清楚:
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 的每一行都有条目 ["number of node"、"number of node"、"merge at level"、"number of parent"]。
所以根节点总是L(end, end),叶子节点的个数最大为size(X, 1),内部节点的个数大于size(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);
请注意,标签在结构上已经是正确的。
我有来自 MATLAB 中 linkage 算法的输出 Z。
输出 Z 的结构在此 link https://uk.mathworks.com/help/stats/linkage.html(向下滚动到输出)
我正在尝试查找树状图的内部节点和叶子的谱系。谱系定义为连接叶 i(内部节点 α_h)和根 α_1 的有序内部节点集。我还希望能够找到父节点 - 这是 v 的节点 w,其中 w 在从根到 v 的路径上紧跟在 v 之前。有人愿意解释我如何使用 MATLAB 做到这一点吗?
如果我的定义不够清楚,图中显示了一个示例。
叶子3的系谱为G(3)={α_7,α_2,α_1},内部节点α_7的系谱为G(α_7)={α_7,α_2,α_1}。父节点的例子:α_7的父节点是α_2,记为g(α_2)=α_7。我知道给定层次聚类的输出 Z 的树索引与图像不同,因此与树状图由 Z 索引的方式一致的代码绝对没问题。我只关心树状图的输出是否正确。
我希望现在我希望代码使用 Z 的输入查找和执行的操作更加清楚。非常感谢您的帮助!
一个小例子让事情更清楚:
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 的每一行都有条目 ["number of node"、"number of node"、"merge at level"、"number of parent"]。
所以根节点总是L(end, end),叶子节点的个数最大为size(X, 1),内部节点的个数大于size(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);
请注意,标签在结构上已经是正确的。