我用Matlab实现了ID3决策树,并使用struct()来存储决策树。
基本上,树结构是这样的:
root: Attr1
left: [1x1 struct]
right: [1x1 struct]是的,树结构是以递归的方式构造的。
有什么快速解决办法吗?这样我就可以画出我的树了吗?
发布于 2013-11-27 04:54:26
我认为(如果我错了,有人可以纠正我),没有内置的方法来平缓递归结构。绘制树的一种可能的方法是使用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值,这样它们就不会重叠树节点。
https://stackoverflow.com/questions/20233253
复制相似问题