我使用Matlab实现了ID3决策树,并使用struct()来存储决策树。
基本上树结构如下所示:
root: Attr1
left: [1x1 struct]
right: [1x1 struct]
是的,树结构是以递归方式构建的。
有没有快速的解决方法,以便我可以绘制我的树?
答案 0 :(得分:1)
我认为(如果我错了,有人可以纠正我)没有内置的方法来压缩递归结构。绘制树的一种可能方法是使用treeplot
,这需要您的数据采用特定格式。您可以通过以下方式实现此目的:
function [nodes,attr] = flatten_struct(dtree,level,nodes,attr)
% Flattens the decision tree struct into a format usable by treeplot
if isempty(dtree)
return;
end
if nargin==1
level=0;
nodes=[];
attr={};
end
nodes = [nodes,level];
attr = [attr,dtree.root];
[nodes,attr] = flatten_struct(dtree.right,level+1,nodes,attr);
[nodes,attr] = flatten_struct(dtree.left,level+1,nodes,attr);
您可以使用[nodes,attr] = flatten_struct(tree)
调用此代码,然后您可以使用treeplot(nodes)
绘制树。您应该能够使用this中列出的方法添加标签来回答其他问题。类似的东西:
[nodes,attr] = flatten_struct(tree);
treeplot(nodes);
[x,y] = treelayout(nodes);
for k=1:length(nodes)
text(x(k),y(k),attr(k));
end
虽然您可能不得不使用x
和y
值,以便它们不会与树节点重叠。