前回、【クラスタ数の決め方の1つシルエット分析】について説明しました。
今回の記事はもう一つのクラスタ数を自動推定するX-meansについて紹介します。
x-meansとは
x-meansは、k-meansのクラスター数kを自動推定しつつクラスタリングしてくれる手法です。k-meansの逐次繰り返しとBIC(Bayesian information criterion)による分割停止基準を用いて最適なクラスター数を決定します。 BICは重心の近くにガウス分布している仮定してBICを計算します。
詳細はx-meansの論文になります。
今回は「pyclustering」のライブラリを使用して、x-meansのクラスタ数推定を行います。
先ず、ライブラリの読み込み
%matplotlib inline
import pyclustering
from pyclustering.cluster import xmeans
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
サンプルの作成
X, y = make_blobs(n_samples=5000,
n_features=2,
centers=4,
cluster_std=1,
center_box=(-10.0, 10.0),
shuffle=True,
random_state=1)
plt.scatter(x=X[:, 0], y=X[:, 1])
X-means クラスタの作成
initializer = xmeans.kmeans_plusplus_initializer(data=X, amount_centers=2)
initial_centers = initializer.initialize()
xm = xmeans.xmeans(data=X, initial_centers=initial_centers)
xm.process()
clusters = xm.get_clusters()
pyclustering.utils.draw_clusters(data=X, clusters=clusters)
Kを指定しなくても、よさげな感じにクラスを分けてくれたことがわかります。