web-dev-qa-db-ja.com

デシジョンツリーのgraphviz表現のfigsizeを指定するにはどうすればよいですか?

アイリスデータセットの決定木のGraphViz表現があります。

import graphviz 
dot_data = tree.export_graphviz(clf, out_file=None, 
                     feature_names=iris.feature_names,  
                     class_names=iris.target_names,  
                     filled=True, rounded=True,  
                     special_characters=True)  
graph = graphviz.Source(dot_data)  
graph

上記のコードを使用してGraphVizを生成しています。しかし、それは大きなグラフを作成します。

しかし、このグラフのfigziseを手動で制御したいと思います。

これどうやってするの?

6

サイズ属性を追加するためにDOTソースコード文字列を変更する独自の関数を最初に作成した後、 _pydotplus.graphviz.Graph_ドキュメント のこのセクションに出くわしました。

Graphvizドット言語で定義されているすべての属性がサポートされている必要があります。

属性は、動的に生成されたメソッドを介して設定できます。

_ set_[attribute name], i.e. set_size, set_fontname
_

これを使用する例を以下に示します。 DOTソースコードでは幅と高さを二重引用符で囲む必要があるため、関数を呼び出すときの構文に注意してください。感嘆符は、寸法の1つが指定された寸法の1つと一致するまで画像のサイズを強制的に変更することを意味します。これは、指定された寸法がグラフの元のサイズよりも大きい場合にのみ問題になるようです。

_import pydotplus
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier, export_graphviz

# Load in the dataset from sklearn
dataset = load_breast_cancer()
X = dataset.data
y = dataset.target
col_names = dataset.feature_names

# Create and fit the decision tree
clf_dt = DecisionTreeClassifier(criterion = 'gini', max_depth = 3)
clf_dt.fit(X_train, y_train)

# Export resulting tree to DOT source code string
dot_data = export_graphviz(clf_dt,
                                feature_names=col_names,
                                out_file=None,
                                filled=True,
                                rounded=True)

pydot_graph = pydotplus.graph_from_dot_data(dot_data)
pydot_graph.write_png('original_tree.png')
pydot_graph.set_size('"5,5!"')
pydot_graph.write_png('resized_tree.png')
_

写真をクリックすると、ブラウザに正しく表示されないように見えるため、サイズを確認してください。

original_tree.png:original tree

resized_tree.png:
resized tree

_pydotplus.graphviz.Graph_オブジェクトにはツリーのDOTソースコード文字列を返すto_string()メソッドがあることにも注意してください。これは、質問の_graphviz.Source_オブジェクトでも使用できます。

_import graphviz
gvz_graph = graphviz.Source(pydot_graph.to_string())
gvz_graph
_
7
Mihai Chelaru