こんにちは!データサイエンティストの青木和也(https://twitter.com/kaizen_oni)です!
この記事では、dtreevizを使っているときに「TypeError: ‘module’ object is not callable」というエラーが発生してしまった時の対処法について紹介いたします!
dtreevizは便利なライブラリなのですが、数年前の情報をもとに実行すると利用できないことがありますので、この記事を参考に実装を書き直してみてください!
dtreevizとは
dtreevizとは、決定木(Decision Tree)のモデルの内容を可視化することができるPythonのライブラリです。
以下はGraphvizという別の決定木可視化用のライブラリを使用した可視化結果です。
一方で、以下の図はdtreevizを使って出力した決定木モデルです。
Graphzvizの可視化結果とdtreevizの可視化結果を比べると、以下のような違いがあることがわかります。
dtreevizの特徴
- ある特徴量における分布を見ることができる
- 決定木の閾値によって、どのように分布をsplitすることができるのかが可視化されている
エラーが発生したコード
私はPricatical Deep Learning for Codersというディープラーニングを一から学ぶ直すことができる海外の無料教材を学習しているのですが、その授業の教材であるDeep Learning for Coders with Fastai and PyTorch: AI Applications Without a PhDの第9章「Tabular」の以下のコードで表題のエラーが出てしまいました。
# 当該Colabの冒頭でdtreevizのtreesモジュールから全ての関数をインポート
from dtreeviz.trees import *
# ブログ主補足
# m : 決定木モデル(学習済み)
# xs : 説明変数(オークション出品物の年代や型番など)
# dep_var : 目的変数(オークションの価格)(dependent variable = 従属変数の略)
samp_idx = np.random.permutation(len(y))[:500]
dtreeviz(m, xs.iloc[samp_idx], y.iloc[samp_idx], xs.columns, dep_var,
fontname='DejaVu Sans', scale=1.6, label_fontsize=10,
orientation='LR')
どうやらこのコードでは、「dtreevizはmoduleだから関数みたいに呼べねえよ」と言われてしまっているようです。
修正版のコード
修正版のコードは以下の通りです。
# dtreevzライブラリをインポート
import dtreeviz
samp_idx = np.random.permutation(len(y))[:500]
# まずは可視化オブジェクトを定義
viz_model = dtreeviz.model(m, X_train = xs.iloc[samp_idx], y_train = y.iloc[samp_idx], feature_names = xs.columns, target_name = dep_var)
# 可視化オブジェクトのview()メソッドを使って、各種設定を指定した上で可視化
viz_model.view(orientation = 'LR', fontname = 'DejaVu Sans', scale = 1.6, label_fontsize = 10)
何を修正したのか
上記のコードによって、以下を修正しています。
- 元々はdtreevizライブラリのtreesモジュールの中のdtreeviz()メソッドを使っていたのを、dtreevizライブラリのmodel()関数を使用する形に変更
- model()関数にはモデルに関する情報(決定木モデル、学習データ、カラム名、目的変数)をインプット
- model()関数を使ってオブジェクトを作成したら、view()メソッドに可視化のための情報(出力の方向、フォント名、出力の大きさ、フォントサイズ)を渡して出力
まとめ
この記事では、dtreevizの可視化でエラーが出てしまった際の対処法についてご紹介しました!
今回のエラーはdtreevizの仕様変更によるものなので、落ち着いて対処すれば何ら問題はありません。
また、dtreevizによって決定木モデルの結果を可視化するだけでなく、決定木モデルの結果を左右する特徴量の分布から外れ値などに気づくことができるため、非常に有用な手法といえます。
皆さんもぜひdtreevizを使った決定木モデルの可視化にチャレンジしてみてください!
コメント