導入
**k-means(k平均法)**は、データを指定した数(k個)のグループに自動で分ける手法です。正解ラベルは使いません。「なんとなく固まっている場所」を見つけてくれます。
説明
make_blobs で、かたまりを持つ練習データを作ります。それを KMeans でグループ分けします。
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
# 3つのかたまりを持つ点を150個生成(centersが本当の生成元だが、学習には使わない)
X, _ = make_blobs(n_samples=150, centers=3, cluster_std=1.0, random_state=0)
model = KMeans(n_clusters=3, random_state=0, n_init=10)
model.fit(X)
print("各点のクラスタ番号(先頭20個):")
print(model.labels_[:20])
print("クラスタの中心:")
print(model.cluster_centers_.round(2))
KMeans(n_clusters=3) は「3グループに分けて」という指示です。学習後、model.labels_ に各点が何番のグループに入ったかが入ります。cluster_centers_ は各グループの中心座標です。正解を一切与えていないのに、点のかたまりごとにグループ番号が振られました。これが教師なし学習です。
グループ番号(0/1/2)は「区別のための記号」で、意味はありません。同じかたまりが実行のたびに別の番号になることもあります。
やってみよう
n_clusters を 2 や 4 に変えると、同じデータでも分け方が変わります。データは3かたまりですが、モデルは指示された数に無理やり分ける、という点を確かめましょう。
演習
KMeans の n_clusters を 4 にして学習し、model.labels_[:10](先頭10点のグループ番号)を表示してください。
ヒント1を見る
KMeans(n_clusters=4, random_state=0, n_init=10) で学習後 print(model.labels_[:10])。