『書籍のエラー対策』 Pythonのscikit-learnライブラリでk-means法 モデル変数のメソッドfit()を実行する際、「FutureWarning: The default value of `n_init` will change from 10 to ‘auto’ in 1.4. …」が表示される

インプレスの「スッキリわかる 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ファイルに書き出す」についても同様です。

コメント

タイトルとURLをコピーしました