インプレスの「スッキリわかる Pythonによる機械学習入門」のエラー対策記事です。
書籍に記述されているコードを間違いなく入力しても警告(Warning)が発生した箇所があったので対策方法を掲載します。
エラーではなく警告なので処理結果は得られるのですが、気持ちの良いものではありませんので、対策します。
警告内容
P.544 第Ⅲ部 第15章 「教師なし学習2:クラスタリング」 – 15.3.2 モデルの作成 / モデルに学習させる のコード15-7 fitメソッドで、モデルに学習させる
# モデルに学習させる
model.fit(sc_df)
を実行すると
FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4.
Set the value of `n_init` explicitly to suppress the warning
super()._check_params_vs_input(X, default_n_init=10)
と警告が表示されます。
実行環境
下記の環境で発生を確認しています。
- Anaconda3-2023.09-0-Windows-x86_64
- JupyterLab 3.6.3
- Python 3.11.5
- pandas 2.0.3
警告の原因
モデル作成時、KMeansクラスのn_init引数に対して値が明示的に指定されていない為です。
P.544 コード15-6 モデルの作成では
model = KMeans(n_clusters = 3, random_state = 0)
となっています。
解決方法
k-means法のモデル作成時、n_init引数に対して値を明示的に指定します。
model = KMeans(n_clusters = 3, random_state = 0, n_init = 10)
警告内容において、
Set the value of `n_init` explicitly to suppress the warning
(警告を抑制するには、`n_init`の値を明示的に設定します。)
と記載があります。
scikit-learnのドキュメントには、KMeansクラスのn_init引数に対し、
Changed in version 1.4: Default value for n_init will change from 10 to ‘auto’ in version 1.4.
(バージョン1.4より、n_initのデフォルト値が 10 から ‘auto’ に変更されます。)
と記載があるので、開発者が変更に気づけるようにしています。
P.554 コード15-12「クラスタ数2~30でSSEを調べる」についても対策することで、大量のWarningを回避できます。
P.556 コード15-14「結果をCSVファイルに書き出す」についても同様です。
コメント