階層クラスタリング完全ガイド:凝集法・分割法・距離尺度・結合法の選択とデンドログラムの読み方
階層クラスタリングとは
階層クラスタリング(hierarchical clustering)は、データを階層構造(ツリー状のクラスタ構造)として表現するクラスタリング手法の総称です。似たもの同士を順次まとめていく「凝集型(ボトムアップ)」と、すべてを一つの集合として開始し分割していく「分割型(トップダウン)」の大きく二種類があります。結果はデンドログラム(樹形図)として可視化され、異なる分解能でクラスタを観察できる点が特徴です。
基本的なアルゴリズムの種類
凝集型(Agglomerative, ボトムアップ):各データ点を1つのクラスタとして開始し、最も近いクラスタ同士を繰り返し統合していきます。最も一般的で、様々な結合法(linkage)と距離尺度を組み合わせて用います。
分割型(Divisive, トップダウン):すべての点を一つのクラスタにまとめた状態から始め、ある基準でクラスタを分割していきます。実装例は少なく、計算コストが高くなる場合がありますが、階層の上位から分割したい場合に使われます。
距離尺度と結合法(linkage)の違い
階層クラスタリングは「どの距離を使うか」「2つのクラスタ間の距離をどう定義するか(結合法)」の組合せで挙動が大きく変わります。代表的なものを挙げます。
距離尺度:ユークリッド距離、マンハッタン距離、コサイン類似度(角度に基づく)、ガワー距離(Gower:混合型データ向け)など。多くの実装は任意の距離行列(pairwise distance)を受け取れます。
結合法:
- 単連結(single linkage):2つのクラスタ間の最短距離。チェイニング(鎖状の連結)が起こりやすい。
- 完全連結(complete linkage):2つのクラスタ間の最大距離。コンパクトで均一なクラスタを好む。
- 平均連結(average linkage / UPGMA):クラスタ間の平均距離。単と完全の中間的性質。
- ウォード法(Ward’s method):クラスタ内分散の増加を最小化するように統合を行う手法。結果として球状(分散が小さい)なクラスタを作りやすい。なお、Ward法はユークリッド距離(分散)を前提とするため、実装によってはユークリッド距離のみをサポートします。
デンドログラムの読み方
デンドログラムはツリー状の図で、葉(leaf)が個々のデータ点、内部のノードがクラスタの統合(または分割)を示します。縦軸(または横軸)はクラスタ間の距離(または不一致度)を表すことが多く、途中で横に線を引いて切ることで任意のクラスタ数を得ることができます。
デンドログラムから読み取れる情報の例:
- どのデータが早く/遅く統合されたか(類似度の度合い)
- クラスタ間の相対的な距離や密度の違い
- 明確な分割があるか(大きなギャップ)かどうか — カットポイントの判断材料
計算量と実装上の注意
階層クラスタリングはすべての対ペア距離を扱うため、基本的にメモリと計算が O(n^2)(距離行列の保存)かかります。古典的なアルゴリズムの単純実装だと O(n^3) の時間を要することがありますが、Lance–Williams 形式などの最適化により、凝集型アルゴリズムは一般に O(n^2) 時間、O(n^2) メモリで実行できます。そのため、データ点数 n が数万単位になると現実的な計算は難しく、サンプリングや近似法、分割統治的手法の検討が必要です。
クラスタ数の決定方法
階層クラスタリングは任意の分解能でクラスタを取得できる利点がある一方で、最適なクラスタ数を決めるのは課題です。代表的な判定基準:
- デンドログラムの大きなギャップ(カットの視覚的判断)
- コフェネティック相関係数(cophenetic correlation coefficient):デンドログラムが元の距離をどれだけ忠実に表現しているかを示す指標
- シルエット幅(silhouette score):各クラスタリングでのクラスタの分離度と凝集度を評価
- 動的ツリーカット(dynamic tree cut)や不一致係数(inconsistency)による自動カット
- 外部基準がある場合はラベルとの一致度(ARI, NMI など)で評価
前処理と実務上のポイント
- スケーリング:特徴量のスケール差は距離計算に直接影響するため、標準化(zスコア)や最小最大スケーリングを行うのが一般的です。特にユークリッド距離を使う場合は重要。
- カテゴリカル変数:そのままでは距離計算できないため、ダミー変数化、あるいはガワー距離のような混合型対応距離を使います。
- 外れ値の影響:単連結は外れ値やノイズによるチェイニングに弱く、ウォード法や完全連結の方がロバストになる場合があります。
- データ数の制約:n が大きい場合は計算・メモリコストの問題から、代表点のサンプリング、近似的クラスタリング(例:バイセクティング、ミニバッチ等)を検討します。
長所と短所
- 長所:ツリー構造により多階層での解析が可能。初期値に依存しない(決定性)。クラスタ数を事前指定する必要が無い。
- 短所:計算コストが高い(距離行列が必要)。一度行った統合/分割は取り消せない(特に凝集法)。結合法や距離の選択に結果が敏感。
実装例とツール
よく使われるライブラリ:
- Python: scipy.cluster.hierarchy(linkage, dendrogram, fcluster, cophenet など)、scikit-learn の AgglomerativeClustering(sklearn.cluster)
- R: hclust, dendextend パッケージなど
注意点:scikit-learn の AgglomerativeClustering の Ward 法はユークリッド距離のみをサポートします。また最近のバージョンでは affinity(metric)引数の扱いが変更されているため、ドキュメントで確認してください。
実務での応用例
- 顧客セグメンテーション(ライフタイムや購入行動の階層的把握)
- 文書・テキストの階層的分類(トピックの大中小構造の抽出)
- 生物学(系統樹に近い考え方での遺伝子/サンプルのクラスタリング)
- 異常検知(孤立したデータや小さなクラスターの検出)
まとめ:使いどころと注意点
階層クラスタリングは、データの多層的な構造を可視化・解析するのに非常に有用です。前処理(スケーリング、カテゴリ変数への対応)、適切な距離・結合法の選択、計算コストの管理が鍵となります。小〜中規模データでは強力な手法ですが、大規模データでは近似手法や別のアルゴリズム(例:k-means, DBSCAN, ラフクラスタリング等)との使い分けを検討してください。
参考文献
- Hierarchical clustering — Wikipedia
- Ward's method — Wikipedia
- scipy.cluster.hierarchy — SciPy documentation
- Clustering — scikit-learn documentation (Hierarchical clustering)
- Lance–Williams algorithm — Wikipedia
- Cophenetic correlation coefficient — Wikipedia
- Gower distance — Wikipedia (mixed data)


