AI関連技術

【機械学習:scikit-learn】from sklearn.externals import joblibでエラーが出る場合の解決方法

エラー解決 【機械学習:scikit-learn】 from sklearn.externals import joblib でエラーが出る場合の解決方法

この記事では、特定のエラーについてピンポイントで解決方法をご紹介します。

執筆時点(2023年2月21日)の情報です。

今後は変わる可能性があることをご理解ください。

また、sklearn(scikit-learn)のバージョンは「1.2.0」で検証していますが、実はあまり関係ありません。

エラーの概要と経緯

機械学習のスクリプトで学習済みデータを保存する際、joblibライブラリをインポートしようとしたらエラーが出ました。

PyCharmでインポートを記述した時点で赤線

そういえば、このスクリプトを最後に使ったのは2020年。

もしかしたら古いのかも?という点を調べて解決方法が分かりましたのでご紹介します。

ちなみに、実行すると、

Traceback (most recent call last):
  File "C:\Users\papa\digittest\test.py", line 5, in <module>
    from sklearn.externals import joblib
ImportError: cannot import name 'joblib' from 'sklearn.externals' 

というエラーが出ます。

ImportError: cannot import name 'joblib' from 'sklearn.externals' のエラーが出た図

機械学習のスクリプトでエラーが出ると絶望するかもしれませんが、解決方法は必ずあるので安心してください。

エラーの原因

今回のエラーの原因は、scikit-learnのバージョンによるもの。

以前はjoblibがsklearn.externalsにバインドされていたので、

from sklearn.externals import joblib

で良かったのですが、ライブラリの一覧を見ると、

ライブラリのインストール状況
PyCharm>settings>Project>Python Interpreter>Package list

このようにjoblib が単体で存在します。

つまり、直接インポートすれば良いのでは?と考えました。

解決方法

それでは、実際にインポートしてdumpしてみましょう。

import joblib
.
.
.
joblib.dump(clf, 'digits.pkl')

実行するとエラーなく学習済みデータ「digits.pkl」ができました。

学習済みデータdigits.pklが作成された図

なお、公式のリファレンスには解決方法がありませんでしたので、上記には根拠などありませんが、joblib がライブラリの一覧に存在するためこれが正解であると考えます。

今回のスクリプトの全体像

念のため、こちらで実行したスクリプトの全文を載せておきます。

from sklearn import datasets, svm, metrics
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
import joblib

digits = datasets.load_digits()
x = digits.images
y = digits.target
x = x.reshape((-1, 64))
print(x)

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)

clf = svm.LinearSVC()
clf.fit(x_train, y_train)

y_pred = clf.predict(x_test)
print(accuracy_score(y_test, y_pred))

joblib.dump(clf, 'digits.pkl')

これを実行することで、scikit-learnの手書き数字データセットを用いた学習済みデータを作成することができます。

参考までに、よくある手書き数字の機械学習サンプルを実行した図。

手書き数字の機械学習サンプルを実行した図
plt.show()で表示した状態

続きが気になる方、手書き数字を認識させたいという要望がありましたら次の記事を書きたいと思います。

まとめ

今回はscikit-learnでfrom sklearn.externals import joblibをしたときにImportError: cannot import name ‘joblib’ from ‘sklearn.externals’ エラーが出たときの理由と解決策について解説しました。

無事にエラーが解決できたら嬉しいです。

「上手くいかない」「別のエラーが出た」などがありましたら、フォームやコメントでお知らせください。

それでは、ステキなPythonライフを!

Pythonの機械学習について詳しく知りたいという初学者には、こちらの書籍がおススメです。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 最近ではPythonを用いたアプリ開発、ウェブアプリケーションの開発と運営に没頭。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です