Python决策树GraphViz

时间:2015-12-07 22:02:25

标签: python scikit-learn graphviz dot pydot

我正在尝试使用scikit实现决策树,然后使用Graphviz可视化树,我理解这是可视化DT的标准选择。我正在使用PyCharm,anaconda,Python 2.7和OS X El Capitan。据我所知,我已经安装了pydot和Graphviz PIP安装,并且还直接在Pycharm安装了它们,但无论我做什么,我都会不断得到一个名为graphviz的“No module”。

from sklearn.datasets import load_iris
from sklearn import tree
#import graphviz as gv
# uncommenting the row above produces an error
clf = tree.DecisionTreeClassifier()
iris = load_iris()
clf = clf.fit(iris.data, iris.target)
with open('graph.dot', 'w') as file:
    tree.export_graphviz(clf, out_file = file)
file.close()

目前运行此代码会生成graph.dot,但我无法查看该文件。 1.如何使graphviz存储库工作? 2.如何将图形写入PDF / PNG?我看到了一些例子,但没有工作 3.我找到了这个命令:dot -Tps filename.dot -o outfile.ps 我在哪里用它?如何验证OS X上是否存在点工具?

提前致谢!

3 个答案:

答案 0 :(得分:1)

我很确定我使用自制程序安装了graphviz,但看起来你也可以从http://www.graphviz.org/Download_macos.php下载二进制文件。如果你不能让pydot工作,你需要从终端运行import subprocess subprocess.call(['dot', '-Tpdf', 'tree.dot', '-o' 'tree.pdf']) 命令,或者使用子进程在脚本中运行:

private void Search_searchButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                    
    try{
        String myUrl="jdbc:derby://localhost:1527/EMPLOYEEINFO";
        String username="ADMIN1";
        String password="ADMIN1";
        Connection myConnection = DriverManager.getConnection(myUrl, username, password);
        Statement myStatement = myConnection.createStatement();

        String myQuery = "SELECT * FROM EMPLOYEE WHERE EMPLOYEE_ID LIKE '%' '"+Search_TxtField.getText()+"' '%' ";

        ResultSet myRs = myStatement.executeQuery(myQuery);
        DefaultListModel myDLM = new DefaultListModel();

        while(myRs.next()){
          myDLM.addElement(myRs.getString(1));
        }//end of while loop

        Search_List.setModel(myDLM);


    }//end of try
    catch(SQLException ex){
        JOptionPane.showMessageDialog(null, ex.toString());
    }//end of catch
}           

答案 1 :(得分:1)

您还可以使用以下代码导出为pdf。

首先安装pydot2

pip install pydot2

然后您可以使用以下代码:

from sklearn.datasets import load_iris
from sklearn import tree
clf = tree.DecisionTreeClassifier()
iris = load_iris()
clf = clf.fit(iris.data, iris.target)

from sklearn.externals.six import StringIO
import pydot 

dot_data = StringIO() 
tree.export_graphviz(clf, out_file=dot_data) 
graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
graph.write_pdf("graph.pdf") 

答案 2 :(得分:0)

如果您的系统上没有/想要graphviz,您也可以将.dot文件作为文本打开并将内容复制到webgraphviz,然后为您创建并显示树。

结果不是您可以保存的图片或文件,并且您必须为您创建的每个树手动执行此操作。对于更复杂和/或批量树构建,您需要系统上的实际graphviz,因此您可以从终端或直接从Python调用dot程序,如maxymoo所述。