Sci*_*ion 9 python decision-tree pydot
我正在使用pydot在python中绘制图形.我想代表一个决策树,比如说(a1,a2,a3是属性,两个类是0和1:
a1>3
/ \
a2>10 a3>-7
/ \ / \
1 0 1 0
Run Code Online (Sandbox Code Playgroud)
但是,使用pydot,只创建了两个叶子,树看起来像这样(png附加):
a1>3
/ \
a2>10 a3>-7
| X |
1 0
Run Code Online (Sandbox Code Playgroud)
现在,在这个简单的情况下,逻辑很好,但在较大的树中,属于不同分支的凌乱的内部节点是统一的.
我正在使用的简单代码是:
import pydot
graph = pydot.Dot(graph_type='graph')
edge = pydot.Edge("a_1>3", "a_2>10")
graph.add_edge(edge)
edge = pydot.Edge("a_1>3", "a_3>-7")
graph.add_edge(edge)
edge = pydot.Edge("a_2>10", "1")
graph.add_edge(edge)
edge = pydot.Edge("a_2>10", "0")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "1")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "0")
graph.add_edge(edge)
graph.write_png('simpleTree.png')
Run Code Online (Sandbox Code Playgroud)
我还尝试创建不同的节点对象而不是创建边缘,而不是将其添加到图形中,但似乎pydot会检查节点池中是否有相同名称的节点而不是创建新节点.
有任何想法吗?谢谢!

Mar*_*ers 13
您的节点始终需要唯一的名称,否则您无法将它们唯一地命名为在它们之间附加边.但是,您可以为每个节点提供一个标签,这是呈现时显示的标签.
因此,您需要添加具有唯一ID的节点:
graph = pydot.Dot(graph_type='graph')
graph.add_node(pydot.Node('literal_0_0', label='0'))
graph.add_node(pydot.Node('literal_0_1', label='0'))
graph.add_node(pydot.Node('literal_1_0', label='1'))
graph.add_node(pydot.Node('literal_1_1', label='1'))
Run Code Online (Sandbox Code Playgroud)
然后添加连接这些节点的图形边缘:
edge = pydot.Edge("a_2>10", "literal_0_0")
graph.add_edge(edge)
edge = pydot.Edge("a_2>10", "literal_1_0")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "literal_0_1")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "literal_1_1")
graph.add_edge(edge)
Run Code Online (Sandbox Code Playgroud)
与您定义的其余边缘一起使得:

| 归档时间: |
|
| 查看次数: |
4491 次 |
| 最近记录: |