[scikit-learn] 11. k-means法によるクラスタリング

matplotlib

はじめに

sklearn.clusterのKMeansでk平均法によるクラスタリングをすることができる。ここではsklearn.datasets.make_blobsで作成したデータに対してクラスタリングを行う方法について説明する。

解説

モジュールのインポートなど

バージョン

データの生成

make_blobsによりデータを作成する。make_blobsについては下記記事で解説した。

[scikit-learn] 1. make_blobsによる分類用データの生成
sklearnのdatasets.make_blobsでクラスタリング用のデータを作成することができる。データポイントはガウス分布に従い生成する。ここでは各種パラメータが生成データに及ぼす影響について説明する。

データの塊の数を5とし、データのばらつき(標準偏差)を設定できるcluster_stdを1,random_stateを10とした。データを表示すると以下のようになる。

クラスター数

Kmeans法ではクラスター数を自分で決める必要がある。ここでは、クラスター数を5と10にしたときの結果を示す。
KMeans(n_clusters)でモデルを設定する。設定したモデルに.fit(X)とすることでクラスタリングを行い、フィットした結果に.labels_とすることでラベルを得ることができる。

結果の表示

cluster_centers_により、クラスタリングして最終的に収束した重心の位置の座標を得ることができる。

初期値

クラスター中心の初期値をinitにより変更できる。デフォルトは”k-means++”で大体ちょうどいい位置に初期値が設定される。”random”はランダムに初期値が決定される。n_initは初期値を設定する回数でmax_iterは計算を行う回数となる。ここでは両方とも1として初期値の位置を確認する。

結果の表示

初期値がk-means++の時は計算回数1でもうまくクラスタリングができている。
randomの場合は初期値がランダムなので、1回の計算ではクラスタリングがうまくいっていないことがわかる。

収束の判断パラメータ tol

誤差がtolの値を下回った時に計算が終了する。ここではtol=0.1の場合とtol=0.0001でクラスタリングした結果を示す。

結果の表示

.n_iter_により計算回数を得ることができる。tolが0.0001の時の計算回数は6で、tolが0.1の時の計算回数は2回となっている。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

sklearn.cluster.KMeans — scikit-learn 0.24.2 documentation
An example of K-Means++ initialization — scikit-learn 0.24.2 documentation

コメント