この記事では、特定の書籍でのエラーについて解決方法をご紹介します。
インプレスより出版のスッキリわかるPythonによる機械学習入門です。
書籍内の記述と同じように記述しても、エラーが出てしまいます。
その解決方法と初心者の方に向けた補足説明をしています。
エラーの原因は、書籍のコードに問題がある場合に限らず、ユーザーの環境(Python またはライブラリのバージョンの違い)によるものなどさまざまです。
今回の解決方法は私の場合は解決できましたが、この記事の方法では解決できないことがあります。
その時はぜひコメントなどで質問してください。
エラーの状況
今回のエラー解決の対象書籍はこちら。
書籍内 P114の 第1部4章「機械学習の体験」>4.4.3新しいデータでの予測 >コード4-17 を実行すると、
UserWarning: X does not have valid feature names, but DecisionTreeClassifier was fitted with feature names warnings.warn
というエラーが出ます。
機械学習のスクリプトでエラーが出ると絶望するかもしれませんが、解決方法は必ずあるので安心してください。
では、さっそく行ってみましょう!
環境
確認したときの環境は以下の通りです。
- python3.9
- pandas : 1.5.2
- scikit-learn : 1.2.0
なお、書籍では Anaconda の JupyterLab を使用していますが、この記事では普通の Python(CPython)を PyCharm で実行しています。
この辺りの開発環境の違いは特に問題ありません。
また、実行時コマンドプロンプトでもシェルスクリプトでもOKです。
状況説明
P114のコード4-17「きのこかたけのこか予測する」を実行すると、エラーが出ます。
taro = [[170, 70, 20]]
model.predict(taro)
なお、本書はその都度必要なコードしか紹介されていませんが、この時点で必要なコードを全て揃えると以下のようになります。
import pandas as pd
from sklearn import tree
model = tree.DecisionTreeClassifier(random_state=0)
df = pd.read_csv('KvsT.csv')
xcol = ['身長', '体重', '年代']
x = df[xcol]
t = df['派閥']
model.fit(x, t)
taro = [[170, 70, 20]]
model.predict(taro)
初心者の方は、この時点で「なぜ?」となりますね。
コード4-1~4-16を参考に、必要なものを集めただけです。
何が必要で何が不要かが分からなかったという方は、上を参考にしてください。
エラーの原因
今回のエラーの原因は、モデルを作成した際の fitメソッド の記述
「model.fit(x, t)」
によるデータ型(データフレーム)と、新しく taro のデータを追加した際の
taro = [[170, 70, 20]]
のデータ型(リスト)が異なるためです。
解決方法
そこで、新しく追加する「taro」の情報をデータフレームに変えることで解決することができます。
その際、列(columns)の名前を適切に指定することでエラーは出なくなります。
import pandas as pd
from sklearn import tree
model = tree.DecisionTreeClassifier(random_state=0)
df = pd.read_csv('KvsT.csv')
xcol = ['身長', '体重', '年代']
x = df[xcol]
t = df['派閥']
model.fit(x, t)
taro = [[170, 70, 20]]
# データフレーム型に変換し、列名を指定
taro = pd.DataFrame(taro, columns=['身長', '体重', '年代'])
model.predict(taro)
なお、JupyterLab や Google Colab 以外の環境では、上記を実行しても結果が表示されません。
最後の
model.predict(taro)
を出力するために、
models = model.predict(taro)
print(models)
としてから実行しましょう。
['きのこ']
これで、書籍通り taro さんは「きのこ派」という判定がでました。
まとめ
無事にエラーが解決できたら嬉しいです。
「上手くいかない」「別のエラーが出た」などがありましたら、フォームやコメントでお知らせください。
それでは、ステキなPythonライフを!
Pythonの機械学習について詳しく知りたいという初学者には、こちらの書籍がおススメです。
2024/03/17
どストライクの内容でした。大変感謝です。
googleで検索すると上の方にありました。
同じ問題に向き合った方が多いのかな?
ありがとうございます。
コメントいただき、ありがとうございます!
お役に立てたようで嬉しく思います。
エラー関係は情報のストックがありますが、記事にし切れていません。
もし何かお困りのことがありましたら、いつでもお問い合わせください。