前提
dtreevizを用いた決定木分析を行っている。
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- dtreeviz()を使えるようにしたい
発生している問題・エラーメッセージ
NameError: name 'dtreeviz' is not defined
該当のソースコード
python
1from sklearn import tree 2from dtreeviz.trees import * 3import graphviz 4 5df_past = pd.read_csv(r"C:\Users\Yasu\Documents\情報科学特別演習\csv\スパム検出済み.csv") 6 7X_name = ["reputation","age","sex"]#説明変数 8y_name = "spam"#目的変数 9X = df_past[X_name] 10y = df_past[y_name] 11 12dtree = tree.DecisionTreeClassifier(max_depth=2) 13dtree.fit(X,y) 14 15viz = dtreeviz(dtree,X,y, 16 target_name = y_name, 17 feauture_name = X_name, 18 class_names = ["not spam","spam"]) 19 20print(viz) 21
試したこと
・pipを更新して再インストールした。
・graphvizのPATHを確認した。
いずれも改善されませんでした。
補足情報(FW/ツールのバージョンなど)
windows11
IDLE
dtreeviz 関数は dtreeviz.compatibility モジュールに含まれているので、以下の様にして import して試してみて下さい。
from dtreeviz.compatibility import dtreeviz
実行してみると
"""
viz = dtreeviz(dtree,X,y,
DeprecationWarning: dtreeviz() function is deprecated starting from version 2.0.
For the same functionality, please use this code instead:
m = dtreeviz.model(...)
m.view()
Warning (from warnings module):
File "C:\Users\Yasu\AppData\Local\Programs\Python\Python310\lib\site-packages\sklearn\base.py", line 450
warnings.warn(
UserWarning: X does not have valid feature names, but DecisionTreeClassifier was fitted with feature names
<dtreeviz.utils.DTreeVizRender object at 0x0000013CDC4F41F0>
"""
とでてきたので、
"""
viz = dtreeviz(dtree,X,y,
target_name = y_name,
feature_names = X_name,
class_names = ["not spam","spam"])
print(viz)
"""
↑この部分を
下のように変えました。
"""
m = dtreeviz.model(dtree,X,y,
target_name = y_name,
feature_names = X_name,
class_names = ["not spam","spam"])
m.view()
"""
しかし、以下のエラーメッセージが表示されました。
"""
m = dtreeviz.model(dtree,X,y,
AttributeError: 'function' object has no attribute 'model'
"""
何がいけないのでしょうか。。。
dtreeviz.model()の引数が違うのでしょうか。
どうやら dtreeviz のバージョンアップで API が変更になった様ですね。先程の、
from dtreeviz.compatibility import dtreeviz
を削除して、単に
import dtreeviz
として、m = dtreeviz.model(dtree,X,y, ...) としてみて下さい。
"""
UserWarning: X does not have valid feature names, but DecisionTreeClassifier was fitted with feature names
"""
このようなエラーメッセージが出てきましたが、X = df_past[X_name]
としているのがいけないのでしょうか?
調べてみると、X がデータフレームの場合に、そのワーニングメッセージが表示される様です。なので、X を X.values に変更して試してみて下さい。
おそらくできたようです!
青文字で下のように出てきたのですが、これはどのようにすれば閲覧できますか?
<dtreeviz.trees.DTreeVizAPI object at 0x000002536E82B550>
view メソッドがあるので、
viz.view()
としてみて下さい。
viewメソッドを実行したものをshowメソッドで実行するらしいです。
なので
"""
m_view = m.view()
m_view.show()
"""
となります。これでできました!
ベストアンサーにしたいので回答よろしくお願いします。
ありがとうございます、回答しました。
回答1件
あなたの回答
tips
プレビュー