インプレスの「スッキリわかる Pythonによる機械学習入門」のエラー対策記事です。
書籍に記述されているコードを間違いなく入力してもエラーが発生した箇所があったので対策方法を掲載します。
エラーの要因として、書籍が出版された後も実行環境が更新されることから、執筆時点では問題なかったものが残念ながら読者が実行するときにはエラーとなるケースがあります。
エラーが解決できず モヤモヤ している人に役立てば幸いです。
エラー内容
P.175 第Ⅱ部 第5章 「分類1:アヤメの判別」 – Column 決定木の描画関数のコード5-28 plot_tree関数で、決定木を描画
# plot_tree関数で決定木を描画
plot_tree(model, feature_names = x_train.columns, filled = True)
を実行すると
InvalidParameterError
・・・
InvalidParameterError: The 'feature_names' parameter of plot_tree must be an instance of 'list' or None.…
とエラーが表示されます。
実行環境
下記の環境で発生を確認しています。
- Anaconda3-2023.09-0-Windows-x86_64
- JupyterLab 3.6.3
- Python 3.11.5
- pandas 2.0.3
エラーの原因
plot_tree関数の引数「feature_names」に、list型ではないx_trans.columnsを指定している為です。
下記のコードを
# 描画関数の仕様上、和名の特徴量を英字に直す
x_train.columns = ['gaku_nagasa', 'gaku_haba', 'kaben_nagasa', 'kaben_haba']
# x_train.columnsのデータ型を確認
print(type(x_train.columns))
実行した結果は、
<class 'pandas.core.indexes.base.Index'>
となり、list型ではありません。
解決方法
引数、feature_names に対してlist型のデータを用意します。
# 以下のコードは不要
# 描画関数の仕様上、和名の特徴量を英字にする
# x_train.columns = ['gaku_nagasa', 'gaku_haba', 'kaben_nagasa', 'kaben_haba']
# 英字の特徴量データを用意
columnnames = ['gaku_nagasa', 'gaku_haba', 'kaben_nagasa', 'kaben_haba']
# 描画関数の利用
from sklearn.tree import plot_tree
# plot_tree関数で決定木を描画
plot_tree(model, feature_names = columnnames, filled = True)
x_train.columns変数へ英字の特徴量を設定する必要はありません。
コメント