def 小児科医():

かけだし小児科医が仕事の合間にプログラミングを勉強するブログです。

dtreevizに手こずった話。

機械学習で決定木の可視化をしたくて、dtreevizを使おうとしたら全然できなくて困った話。

やりたかったこと

from dtreeviz.trees import dtreeviz
# 決定木を描画
viz = dtreeviz(clf, data_e, data_o, target_name='Class', feature_names=time_index, class_names=['False', 'True'])

viz.view()

 

最終形(一応動く)

import os
os.environ["PATH"] += os.pathsep + '/opt/homebrew/bin'
from dtreeviz.trees import dtreeviz


# 決定木を描画
m = dtreeviz(clf,
data_e,
data_o,
target_name='Class',
feature_names=time_index,
class_names=['False','True'],)

m.view()

 

①まず、そもそもモジュール使用からできない

from dtreeviz.trees import dtreeviz

だとそんなのないよってエラーがくる。

ググってみるとバージョン変わってからimport dtreevizのみでやらないとダメになったみたい。

 

 

②モジュールは使えるようになってけどできない

やってみるとこんなエラーが出た

 

'int' object is not subscriptable

しかも今のバージョンではdtreeviz()は使えないからdtreeviz.models()にしてねって。

 

どんだけバージョン変更してんだよ。

 

③もうできなすぎてバージョン落とした

んでやってみると、

AttributeError: 'function' object has no attribute 'models'

 

えーここから悩みに悩みまくって、色々調べた結果

バージョンを落とすことにした

バージョンに振り回されてばかりである。(1.4.1まで下げた)

 

④パスも通ってなかった

んで実行すると

graphviz.backend.execute.ExecutableNotFound: failed to execute PosixPath('dot'), make sure the Graphviz executables are on your systems' PATH

graphvizってやつのパスがないのかぁ

which dotで確認

/opt/homebrew/bin/dot

あーここねー

os.environ["PATH"] += os.pathsep + '/opt/homebrew/bin/dot'

じゃあこうすれば、、、

[Errno 20] Not a directory: PosixPath('dot')

何でだよ。

 

⑤最後はアホすぎるミス

そしてここから5時間くらい悩んだ末、気づいた。

pathの場所のdotいらなくね、、、指定するのここまでじゃね、、、/opt/homebrew/bin

 

 

 

 

できた。アホみたいなミスだったけどマジで辛かった。