質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Q&A

0回答

878閲覧

Graphvisとpydotplusで決定木を可視化

Utats

総合スコア8

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

0グッド

0クリップ

投稿2020/08/11 23:38

前提、実現したいこと

Graphvisとpydotplusで決定木を可視化しようとしています。

Graphviz本体はインストール後PATHを通しており、python上で作動させるためのモジュールpython-graphvizもインストール済みです。また、可視化をJupyterNotebookで完結させたいのでpydotplusをインストールして下のコードを書きました。

該当のソースコード

clf = DecisionTreeClassifier(random_state=0)
clf.fit(X_train,t_train)

dot_data = export_graphviz(clf, out_file=None, class_names=['maligrant','benign'], feature_names=cancer.feature_names, impurity=False, filled=True)

graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_png('tree.png') #ここでバグ発生

###発生している問題
graph.write_png()のところでpathが見つからないとのエラーメッセージが出ます。確認するとディレクトリには一応tree.pngという名前のファイルがpng形式で作成されていました。しかし、このファイルを開いてもフォーマットが認識されなかったり、白い画面が表示されるだけでした。

エラーメッセージ

以下、エラーメッセージの全文です

InvocationException Traceback (most recent call last)
<ipython-input-2-9278127ff7a6> in <module>
21 dot_data = export_graphviz(clf, out_file=None, class_names=['maligrant','benign'], feature_names=cancer.feature_names, impurity=False, filled=True)
22 graph = pydotplus.graph_from_dot_data(dot_data)
---> 23 graph.write_png('tree.png') #ここでバグ発生
24 #Image(graph.create_png())
25

~\anaconda3\lib\site-packages\pydotplus\graphviz.py in <lambda>(path, f, prog)
1802 lambda path,
1803 f=frmt,
-> 1804 prog=self.prog: self.write(path, format=f, prog=prog)
1805 )
1806

~\anaconda3\lib\site-packages\pydotplus\graphviz.py in write(self, path, prog, format)
1910
1911 else:
-> 1912 fobj.write(self.create(prog, format))
1913 finally:
1914 if close:

~\anaconda3\lib\site-packages\pydotplus\graphviz.py in create(self, prog, format)
2024 raise InvocationException(
2025 'Program terminated with status: %d. stderr follows: %s' % (
-> 2026 status, stderr_output))
2027 elif stderr_output:
2028 print(stderr_output)

InvocationException: Program terminated with status: 1. stderr follows: The system cannot find the path specified.

type(graph)

試したこと

dot_dataとしてではなくdot形式のファイルをpydotplusの関数に渡す方法も試してみましたが、同様のエラーメッセージを得ました。

そもそも、write_png()に渡す引数は作成するpng形式のファイル名なのではないでしょうか?だとすればpathが見つからないというメッセージも理解できないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/08/12 02:32

> Graphviz本体はインストール後PATHを通しており パスはシステムに反映されていますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問