2016-07-27 17 views
0

を可視化バイナリ分類問題:export_graphvizと私は「テキスト」に次のコードを使用していDT

def visualize_tree(tree,feature_names): 
    dot_data = StringIO() 
    export_graphviz(tree, 
        out_file=dot_data, 
        feature_names=feature_names, 
        special_characters=True)   
    graph = pydot.graph_from_dot_data(dot_data.getvalue(),) 
    graph.write_pdf("iris.pdf") 

vec = CountVectorizer(lowercase=True, tokenizer=tokens2, binary=True, ngram_range=(1,2)) 
x = vec.fit_transform(X_train) 
clf1 = DecisionTreeClassifier() 
clf1.fit(x, y_train)  
visualize_tree(clf1, vec.get_feature_names()) 

私はそれがこのような美しい木を生成しますfeature_names=feature_names,ずにを使用します。 enter image description here

私は木に余分な詳細を追加するfeature_names=feature_names,を追加するときしかし、それは私に、以下の「半木」を提供します!:

enter image description here 矢印なしで1行にすべて!どんな考え?私が試すことのできる代替手段はありますか?

+0

非常に奇妙な、あなたは最小限の例を作成することができますこれはどこで起こるのですか? 'DecisionTreeClassifier'に' max_depth = 2'を設定してもそれは起こりますか? – maxymoo

+0

DecisionTreeClassifierにmax_depth = 2を設定してもツリーが構築されません! – Ophilia

+0

あなたは 'out_file = 'tree.dot''を変更し、' 'dot -Tpdf tree.dot -o tree.pdf''を使ってコマンドラインからpdfを生成することができますか? – maxymoo

答えて

1

よりもむしろpydotを使用して、あなたはちょうどあなたが空想になりたい場合は、subprocessとあなたのコードから呼び出すことができ、コマンドラインからgraphvizのを使用することができます。

import subprocess 

export_graphviz(model, 
       out_file='tree.dot', 
       feature_names=feature_names) 

subprocess.call(['dot', '-Tpdf', 'tree.dot', '-o' 'tree.pdf']) 
関連する問題