見出し画像

友だちPython ep1. dtreeviz

はじめに


友だちPython シリーズのご紹介

友だちPython シリーズは、Python の小ネタを短文でお届けします。
小さなエピソードを重ねてPythonと仲良しになれたら、と願ってシリーズ名を付けました。

話題


AI・データサイエンスのための 図解でわかる数学プログラミング

この記事は、書籍「AI・データサイエンスのための 図解でわかる数学プログラミング 初版」(ソーテック社)のコードで生じたエラー対処を取り扱います。

エラーの概要

第2章、2-6「決定木によって行動の原因を推定してみよう」の「決定木を描画する」コード(78ページ)でエラーが生じました。
決定木の樹形図等を可視化するライブラリ「dtreeviz」を実行すると、いくつかの問題事象が重なって、複雑なエラーになりました。

実行環境
・dtreeviz のバージョン: 2.2.1 
・VS code の Jupyter Notebook で実行

問題の詳細

問題事象1
「dtreeviz.treesが見つからない」

ImportError: cannot import name 'dtreeviz' from 'dtreeviz.trees'

問題事象2
「moduleオブジェクトを呼び出せない」

TypeError: 'module' object is not callable

問題事象3
「リストのインデックスは整数かスライスでなければならない。numpyのfloat64ではない」

TypeError: list indices must be integers or slices, not numpy.float64

改善後のコード

# でコメントアウトした部分に問題がありました。
次行に修正後のコードを記載しました。

# 決定木を描画する

# from dtreeviz.trees import dtreeviz      # 事象1修正前
import dtreeviz

# indexの抽出
x_0 = df_info.resample('M').count()
x_0 = x_0.drop(x_0.columns.values, axis=1)
time_index = x_0.index

# 決定木を描画

#  viz = dtreeviz(                         # 事象2修正前
viz = dtreeviz.model(
                     clf,
                    #  data_e,             # 事象3修正前
                    #  data_o,             # 事象3修正前
                     data_e.astype(int), 
                     data_o.astype(int),
                     feature_names=time_index,
                     target_name='Class',
                     class_names=['FALSE', 'TRUE'])
# viz                                      # 事象2修正前
viz.view()

実行結果

きれいなビジュアルの樹形図を見ることができました。
なお、決定木による分類結果が書籍の結果と異なるため、樹形図が書籍と異なる内容になりました。

ちなみに、scikit-learn の plot_tree の樹形図は次のようになります。

# 決定木を描画する sklearnのplot_tree
from sklearn.tree import plot_tree
plt.figure(figsize=(10,5))
plot_tree(clf, feature_names=time_index, class_names=['False', 'True'],
          filled=True);

(参考)エラーの解読

事象1、2
dtreeviz は バージョン 2.0.0 以降、API が変わりました。
書籍はこれよりも前のバージョンで動作確認したのだと思われます。

事象3
dtreevizに渡す変数のうち、float型のものを astypeでint型に変換したら、正常に動くようになりました。
(int型がdtreevizの必須要件なのかは未調査です)


おわり

ブログの紹介


noteで3つのシリーズ記事を書いています。
ぜひ覗いていってくださいね!

1.のんびり統計
統計検定2級の問題集を手がかりにして、確率・統計をざっくり掘り下げるブログです。
雑談感覚で大丈夫です。ぜひ覗いていってくださいね。
統計検定2級公式問題集CBT対応版に対応しています。

2.Python機械学習プログラミング実践記
書籍「Python機械学習プログラミング PyTorch & scikit-learn編」を学んだときのさまざまな思いを記事にしました。
この書籍は、scikit-learnとPyTorchの教科書です。
よかったらぜひ、お試しくださいませ。

3.データサイエンスっぽいことを綴る
統計、データ分析、AI、機械学習、Pythonのコラムを不定期に綴っています。
「統計」「Python」「数学とPython」「R」のシリーズが生まれています。

この記事が気に入ったらサポートをしてみませんか?