2013-11-27 5 views
0

Я реализовал дерево решений ID3 с Matlab, и я использовал struct() для хранения дерева решений.Matlab построить сложную структуру

В основном древовидная структура выглядит следующим образом:

root: Attr1 
left: [1x1 struct] 
right: [1x1 struct] 

Да, структура дерева строится рекурсивным способом.

Есть ли быстрое обходное решение, чтобы я мог построить свое дерево?

ответ

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 таким образом, чтобы они не перекрывали друг друга узлы дерева.

Смежные вопросы