039_【クラスタリング】k-means(k平均法)

目次

k-means(k平均法)とは?

k-means(k平均法)とは、k近傍法と同じく近くにあるデータは仲間という考え方を扱うアルゴリズムです。k近傍法と違う点は、データ全体をグループ分けするという点です。近い者同士でグループ分けを行います。

STEP
指定したグループ数の仮の重心をランダムに決定
STEP
決定した重心から近い点を探してグループ分けを行う
STEP
各グループの平均値を求めてそれを各重心に変更&重心が動いていたらさらに続ける
STEP
2と3を繰り返す
STEP
重心が動かなくなったらグループ分けは終了

k-means(k平均法)の使い方

上記の書式を用いて学習させたモデルにpredict命令で説明変数Xを渡すと予測結果が帰ってきます。

ここから

で作成したplot_boundary関数を使っていくためこの関数をあらかじめ実行し、読み込ませておいてください!

k-means(k平均法)を試してみる

ランダムの種:2
特徴量:2
塊数:3
ばらつき:0.5
点の数:500
のデータセットを用いてk平均法の分類を散布図で確認してみましょう!

コード

#1 ランダムの種:2、特徴量:2、塊数:3、ばらつき:0.5、点の数:500個のデータセットを作成
#2 k平均法の学習モデルを作成
#3 全データでこの学習モデルの分類の状態を表示
#4 テストデータを使ってこの学習モデルの分類の状態を表示


from sklearn.cluster import KMeans

X, y = make_blobs(    #1
    random_state=2,
    n_features=2,
    centers=3,
    cluster_std=0.5,
    n_samples=500)

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)


model = KMeans(n_clusters=3)    #2
model.fit(X)

df = pd.DataFrame(X)    #3
plot_boundary(model, df[0], df[1], y, "df [0]", "df [1]")

参考資料:Python3年生機械学習のしくみ

実行結果

データを3つのグループに分けることができました!

2つのグループに分けてみよう!

先ほどはグループを3つに分けることができましたが、次は、2つのグループに分けるk平均法のモデルを作ってグループ分けを行ってみましょう。

コード

#1 2グループに分けるk平均法の学習モデルを作成
#2 この学習モデルの分類の様子を描画する

model = KMeans(n_clusters=2)    #1
model.fit(X)

df = pd.DataFrame(X)    #2
plot_boundary(model, df[0], df[1], y, "df [0]", "df [1]")

参考資料:Python3年生機械学習のしくみ

実行結果

2つのグループに分けることができました!紫と青を1つのグループとして、オレンジをまた1つのグループとして認識しています。

確認問題

ランダムの種:1
特徴量:2
塊数:3
ばらつき:0.7
点の数:500
のデータセットを用いてk平均法の分類を散布図で確認してみましょう。

答えはコチラをクリック!

答え:

from sklearn.cluster import KMeans

X, y = make_blobs(
    random_state=1,
    n_features=2,
    centers=3,
    cluster_std=0.7,
    n_samples=500)

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)


model = KMeans(n_clusters=3)
model.fit(X)

df = pd.DataFrame(X)
plot_boundary(model, df[0], df[1], y, "df [0]", "df [1]")
ヒント

このような散布図になるはずです!

目次