Pythonでグラフを描くためにpydotを使用しています。決定木を表現したいと思います。たとえば、(a1、a2、a3は属性で、2つのクラスは0と1です。
a1>3
/ \
a2>10 a3>-7
/ \ / \
1 0 1 0
ただし、pydotを使用すると、2つの葉のみが作成され、ツリーは次のようになります(png添付)。
a1>3
/ \
a2>10 a3>-7
| X |
1 0
さて、この単純なケースではロジックは問題ありませんが、より大きなツリーでは、異なるブランチに属する厄介な内部ノードが統合されます。
私が使用している単純なコードは次のとおりです。
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')
また、エッジを作成してグラフに追加するのとは異なるノードオブジェクトを作成しようとしましたが、pydotは、新しいノードを作成するのではなく、同じ名前のノードのノードプールをチェックしているようです。
何か案は?ありがとう!