【機械学習の知識】階層的クラスタリングの代表格「凝集型クラスタリング」の手順と仕組み
教師なし学習のクラスタリング手法において、事前にクラスタ数を決めずにデータの親子関係や木のつながりを視覚的に捉えられる「階層的クラスタリング」。その中でも最も一般的に使われる「凝集型(アグロメレーティブ)クラスタリング」の具体的な手順と仕組みを整理します。
1. 【 概要 】
凝集型クラスタリング(Agglomerative Hierarchical Clustering)とは、最初はすべてのデータ点がそれぞれ独立した「1つの小さなクラスタ」として存在している状態からスタートし、最も距離の近いペア同士を次々に合体させて大きなクラスタへと育てていくボトムアップ型の手法です。
データがどのようにまとまっていくかの過程(デンドログラムと呼ばれる樹形図)を可視化できるため、データの構造を直感的に深く理解できるのが大きなメリットです。
2. 【 基本手順(3つのステップ) 】
(2) 空間内で最も距離が近い(類似している)クラスタ同士をグループ化して合体する
(3) 終了条件(指定したクラスタ数に達したか等)を確認し、満たしていなければ(2)に戻る
3. 整理:各ステップの具体的な処理内容
凝集型クラスタリングがどのようなロジックでグループを大きくしていくのか、ステップごとに詳しく見ていきましょう。
【 各プロセスの具体的な仕組み 】
データが100個あれば、最初は「100個のクラスタ(中身はデータが1つずつ)」が存在している状態から始まります。
・ステップ(2):一番近いペアの結合
すべてのクラスタ間の距離を計算し、最も距離が近い(類似度が高い)と判定された最も近接するペア同士を1つの大きなグループにまとめます。この時点でクラスタの総数は1つ減ります。
・ステップ(3):終了条件の確認とループ
「目的のクラスタ数(例: 3個)に到達したか」や「全てのデータが1つにまとまったか」という終了条件をチェックします。
条件を満たしていない場合は、新しくできたクラスタと他のクラスタとの距離を再計算し、ステップ(2)の結合処理を繰り返します。
4. 関連して押さえたい「クラスタ間の距離の測り方(連鎖基準)」
ステップ(2)において、「クラスタとクラスタの距離をどうやって測るのか?」という基準(リンク基準)には、いくつかの重要な選択肢があります。
・最遠隣法(Complete Linkage):クラスタ内の「最も遠いデータ同士」の距離をグループ間の距離とする。広がりのある綺麗な固まりになりやすい。
・最短隣法(Single Linkage):クラスタ内の「最も近いデータ同士」の距離をグループ間の距離とする。鎖状につながったデータ(チェーニング効果)を検出しやすい。
・群平均法(Average Linkage):クラスタ内のすべてのデータの組み合わせの「平均距離」を使う。バランスが良く実務でよく使われる。
・ウォード法(Ward's Method):結合したときに「分散の増加が最小になるペア」を選ぶ。丸っこいコンパクトなクラスタを作りやすい(Scikit-learnのデフォルト)。
5. 補足:Python(Scikit-learn)での実装コード例
Pythonで凝集型クラスタリングを実行し、樹形図(デンドログラム)を描く準備をする際の実装イメージです。
可読性の高いライトグレーの背景でまとめています。
from sklearn.cluster import AgglomerativeClustering
# クラスタ数を3に指定し、ウォード法(ward)を用いてクラスタリング
agg_clustering = AgglomerativeClustering(n_clusters=3, metric='euclidean', linkage='ward')
# データの学習と各データへのクラスタ番号の割り当て
clusters = agg_clustering.fit_predict(X)
print(f"各データの割り当て結果: {clusters}")
# デンドログラム(樹形図)を描きたい場合は scipy.cluster.hierarchy を使用します
6. まとめ
凝集型クラスタリングは、「全データからスタートして、最も近いペア同士を合体させる」というボトムアップの原則を繰り返す非常に分かりやすいアルゴリズムです。
k-means法とは異なり事前のクラスタ数を厳密に決めなくても全体の系統図(デンドログラム)が描けるため、データの構造をじっくり探索したいときに強力な武器となります!