インプレスの「スッキリわかる Pythonによる機械学習入門」のエラー対策記事です。
書籍に記述されているコードを間違いなく入力しても警告(Warning)が発生した箇所があったので対策方法を掲載します。
エラーではなく警告なので処理結果は得られるのですが、気持ちの良いものではありませんので、対策します。
警告内容
P.544 第Ⅲ部 第15章 「教師なし学習2:クラスタリング」 – 15.3.2 モデルの作成 / モデルに学習させる のコード15-7 fitメソッドで、モデルに学習させる
# モデルに学習させる
model.fit(sc_df)
を実行すると
UserWarning: KMeans is known to have a memory leak on Windows with MKL,
when there are less chunks than available threads. You can avoid it by setting the
environment variable OMP_NUM_THREADS=2.
と警告が表示されます。
実行環境
下記の環境で発生を確認しています。
- Anaconda3-2023.09-0-Windows-x86_64
- JupyterLab 3.6.3
- Python 3.11.5
- pandas 2.0.3
警告の原因
KMeansクラスは使用可能なスレッドよりも分割データ数が少ない場合、MKLを使用するWindowsでメモリリークが発生することがある為です。
解決方法
OSの環境変数 OMP_NUM_THREADS に 2 を設定します。
コードに以下を記述することで解決できます。
注意点として、scikit-learnライブラリをインポートする前に記述する必要があるので、コード15-4の先頭(より手前)に追加します。
import os
os.environ["OMP_NUM_THREADS"] = "2"
Windowsの「システムのプロパティ」から環境変数を追加・設定する方法もありますが割愛します。
コメント