凝集型クラスタリングとは
データポイントを単クラスタと仮設定し、最も似たクラスタ同士を指定の数のクラスタ数になるまで集めていく。
また、クラスタの結合は少ない数のクラスタ同士で結合していこうとする。
"最も似た"のアルゴリズムは以下の3種類がある。
- ward (併合した際のクラスタの分散が最小になるように選択)
- average(クラスタ間のデータポイントの平均値を最小になるよう選択)
- complete(クラスタの点間の距離の最大値が最小となるよう選択)
大体の場合はwardで正しく分類されるみたい。
凝集型クラスタリングを行う
AgglomerativeClustering()
でクラスタリングを行います。
from sklearn.datasets import make_blobs from sklearn.cluster import AgglomerativeClustering X, y = make_blobs(random_state=1) agg = AgglomerativeClustering(n_clusters=3) assignment = agg.fit_predict(X) mglearn.discrete_scatter(X[:,0], X[:,1], assignment) plt.xlabel("Feature 0") plt.ylabel("Feature 1")
クラスタ併合の順序を可視化する
from scipy.cluster.hierarchy import dendrogram, ward X, y = make_blobs(random_state=0, n_samples=12) linkage_array = ward(X) dendrogram(linkage_array) ax = plt.gca() bounds = ax.get_xbound() ax.plot(bounds, [7.25, 7.25], '--', c="k") ax.plot(bounds, [4, 4], '--', c="k") ax.text(bounds[1], 7.25, " two clusters", va="center", fontdict={"size":15}) ax.text(bounds[1], 4, " three clusters", va="center", fontdict={"size":15}) plt.xlabel("Sample index") plt.ylabel("Cluster distance")
リンク