export_graphviz和可视化DT

时间:2016-07-27 19:30:21

标签: python-2.7 scikit-learn

我在'文本中使用以下代码'二元分类问题:

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 :(得分:1)

您可以在命令行中使用graphviz,而不是使用pydot,如果您想要使用subprocess,可以从代码中调用它:

import subprocess

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

subprocess.call(['dot', '-Tpdf', 'tree.dot', '-o' 'tree.pdf'])