クラスタリングとは?意味・仕組みとクラスタを使う論文2本(2026年11月時点)

クラスタリング

Clustering / クラスター分析

クラスタリングとは、正解のラベルが付いていないデータを、互いに似ている度合いに基づいて、似たもの同士のグループ(クラスタ)に分ける教師なし学習の手法のこと。

要するに

  • 似ている度合いは距離やコサイン類似度で測り、手法の結果はこの測り方で決まる
  • k 平均法、階層的、DBSCAN、混合ガウスはクラスタの形や外れ値で向き不向きが違う
  • 正解がないので、評価の指標には前提があり、クラスタに意味を付けるのは人になる

最終確認

白い面で3つのまとまりに分かれた白・薄紫・黒の粒と、それぞれを囲む紫の細い糸、手前のまとまりの中央のすりガラスの球
目次8

ひとことで言うと

クラスタリング(Clustering、クラスター分析)は、ラベルの付いていない例を、互いに似ている度合いに基づいてグループ(クラスタ)に分ける教師なし学習の手法だ。Google の機械学習の講座によると、例にラベルが付いていれば、この種のグループ分けは分類と呼ぶ。

講座は新しい治療法を評価する仮想の患者調査の例を挙げている。患者が症状の出る頻度と重さを報告し、研究者は治療への反応が似た患者をクラスタにまとめる。

仕組み

クラスタリングで決めることは、大きく次の3つになる。作業の流れの全体と、k 平均法(k-means)の計算の手順は、教師なし学習のページにある。

  1. 2つの例がどれだけ似ているかを、1つの数値で表す方法(類似性の指標)
  2. その指標を使って例をまとめる手法
  3. クラスタの数と、結果の良し悪しの確かめ方

似ている度合いの測り方

Google の講座によると、データが小さく、特徴量(モデルが使う値)を組み合わせやすいときは、人が指標を作れる。靴のサイズと価格なら、まず両方のスケールをそろえてから、差を1つの数値にまとめる。数値の特徴量はユークリッド距離でまとめられる。車の色のように値が1つのカテゴリは、一致すれば1、違えば0とする。映画のジャンルのように値が複数あるものは、共通する値の割合(ジャッカード類似度)を使う。

データが複雑になると、手で指標を作るのは難しくなる。その場合は、教師ありのニューラルネットワークで作ったエンベディング(意味を数字の並びで表したもの)どうしの近さを測る。講座が挙げる測り方は3つある。

測り方 何を見るか 似ているほど
ユークリッド距離 ベクトルの端どうしの距離 小さくなる
コサイン類似度 2つのベクトルの間の角度のコサイン 大きくなる
内積 コサインに両方のベクトルの長さを掛けたもの 大きくなる。ベクトルが長いほどさらに大きくなる

講座によると、学習データによく出てくる例(人気のある YouTube の動画など)は、エンベディングのベクトルが長くなりやすい。人気を反映させたいときは内積を選ぶが、人気のある例が似ている度合いをゆがめるおそれがある。ベクトルの長さを1にそろえれば、3つの測り方は同等になる。

代表的な4つの手法

Google の講座は、よく使われる手法の考え方を、重心、密度、分布、階層の4つに分けて説明している。考え方ごとに代表的な手法を1つ挙げ、scikit-learn(Python の機械学習ライブラリ)のユーザーガイド 1.9.1 の比較表とあわせると、向き不向きは次のとおりだ。

手法 考え方 向いている場面 向かない場面
k 平均法 クラスタの中心(重心)からの距離で分ける 大きさがほぼ同じクラスタ、大量のデータ 大きさや密度が違うクラスタ、外れ値の多いデータ
階層的クラスタリング クラスタを木の形に重ねる 動物の分類のような階層のあるデータ 結合の条件を付けない大きなデータ
DBSCAN 例が密に集まった場所をつなぐ どんな形のクラスタでも、外れ値を除きたいとき 密度の違うクラスタ、次元の多いデータ
混合ガウスモデル データがいくつかのガウス分布から生まれたと仮定する 分布の形を想定できるデータ、密度の推定 分布を想定できないデータ、大量のデータ

階層的クラスタリングでは、木を適切な高さで切ることで、クラスタの数を自由に選べる。scikit-learn のガイドによると、1件ずつのクラスタから始めて順に合わせていく方式は、結合の条件を付けないと、毎回すべての合わせ方を調べるので計算の費用がかかる。

DBSCAN は、距離 eps の範囲に min_samples 個以上のほかの例がある例を「核」とし、核のつながりをクラスタにする。核ではなく、どの核からも eps 以上離れた例は外れ値になる。ガイドは、eps が小さすぎるとほとんどの例がノイズになり、大きすぎると近いクラスタが1つにまとまると書いている。

混合ガウスモデル(GMM)は、それぞれの例がどの分布から生まれたかの確率を計算する。ガイドは GMM を、データの広がり方(共分散)の情報まで取り込むように k 平均法を一般化したものと説明している。

表で見る最新の状況

上の「クラスタリングに関わる論文2本」は、TRAIL の研究記事から、クラスタリングと関わる論文を2本選び、古い順に並べたものだ。中身は2026年11月6日に arXiv の論文のページで確かめた。

Sentence-BERT(2019年8月)は、BERT の作りはクラスタリングのような教師なしの作業に向かないと書いている。BERT は2つの文を一緒に入力する必要があり、1万の文から最も似た組を探すには約5,000万回の計算、約65時間がかかるという。Sentence-BERT は文ごとにエンベディングを作り、コサイン類似度で比べられるようにした。論文は、同じ探し方が約5秒になると報告している。

HuBERT(2021年6月)は、音声の学習で、クラスタリングの結果を予測の目標になるラベルに使った。最初は100クラスタの k 平均法から始め、クラスタリングを2回くり返した。論文は、HuBERT が頼るのは割り当てたクラスタのラベルの質よりも、クラスタリングの一貫性だと書いている。

クラスタリングと分類の違い

クラスタリング 分類
学ぶ材料 ラベルのない例 ラベルの付いた例
グループの種類 人が先に決めない 先に決めたカテゴリに当てはめる
結果に付くもの クラスタ ID という一意のラベル。意味はあとから付ける カテゴリ(迷惑メールかどうかなど)
結果の確かめ方 正解がないので、まとまり方や後の処理での性能で確かめる 正解と比べ、誤りの数などを数える

分類のくわしい仕組みは教師あり学習のページにある。

仕事でどう関係するか

顧客をグループに分けるとき

Google の講座は、クラスタリングの使い道の最初に市場セグメンテーションを挙げている。似ている度合いを計算するには、特徴量のスケールをそろえる必要がある。講座によると、分布を確かめずに変換するなら、分位(同じ件数ずつに区切った位置)を使える。分位を n 個にするなら、少なくとも 10n 件の例が要る。

外れ値は重心を引っぱり、外れ値だけのクラスタができることもある。講座は分ける前に外れ値を除くか、上限で切ることを勧めている。

プロンプト
添付の顧客データを、k 平均法でグループに分ける前の準備を手伝ってください。
各列の分布を確かめ、スケールのそろえ方(正規化、対数、分位)を列ごとに提案してください。
外れ値になりそうな顧客と、その理由も一覧にしてください。

文書や問い合わせをグループに分けるとき

文章を分けるときは、文章をベクトルに変えてから分ける。scikit-learn の例は、20のテーマの投稿から4つのテーマの3,387件を選び、単語の出方で作ったベクトル(TF-IDF)を k 平均法で分けている。計算を1回だけにして、最初の中心を選ぶ乱数を5通りに変えた試しのうち1つでは、3つのクラスタが1件ずつになり、残りの3,384件が1つのクラスタに入った。例は、最初の中心がほかから離れた例の上に置かれると、そのまま1件だけのクラスタになることがあると説明している。

k 平均法の結果は最初の中心の選び方で変わるので、何回か計算して比べる。scikit-learn の例は、最初の中心を変えた計算の回数を増やし、クラスタの中のばらつきが最も小さい結果を選ぶことを、この偏りを避ける方法の1つに挙げている。問い合わせの文章をまとめたいときも、文章をベクトルに変えてから分ける点は同じだ。

プロンプト
添付の問い合わせ200件を、内容の似たものどうしのグループに分けてください。
グループごとに、よく出る語を10個と、代表的な問い合わせを3件挙げてください。
グループの名前は付けず、どの問い合わせを同じグループにしたかの理由を書いてください。

結果に名前を付けるとき

Google の用語集によると、すべての例を分けたあとで、各クラスタに意味を付けられる。用語集は、人の研究者がクラスタを見てラベルを付ける例を載せている。scikit-learn の文書の例は、クラスタの中心で重みの大きい単語を並べて、クラスタの中身をつかめるようにしている。例のページに載った実行結果では、ある1つのクラスタの上位の語は space、launch、orbit、nasa だった。

名前を付ける前に、似ていると分かっている例が、実際に同じクラスタに入っているかを確かめる。Google の講座は、データ全体を代表する例の組で似ている度合いを計算し、自分の知識と比べることを勧めている。

注意点と限界

正解のラベルがないときの指標として、scikit-learn のガイドはシルエット係数を挙げる。同じクラスタの例との平均の距離と、次に近いクラスタの例との平均の距離から計算し、値は -1 から 1 までになる。シルエット係数は DBSCAN のような密度で作ったクラスタより、丸くまとまったクラスタで高く出やすい。

正解のラベルを使う評価にも限界がある。scikit-learn の文書の例は、ラベルが文書のテーマを正しく表しているとは限らないので、ラベルを使う指標が最良の評価とは限らないと書いている。後の処理での性能で確かめる方法は、Google の講座によると複雑で費用もかかる。

データの量にも気を付ける。Google の講座によると、多くの手法はすべての例の組の似ている度合いを計算するので、時間が例の数の2乗に比例して増え、数百万件のデータには向かない。k 平均法の時間は例の数に比例する。

欠けた値にも注意が要る。Google の講座は、似ている度合いを設計するときに「不明」という値は使えないと書いている。不明な値と分かっている値の近さを数値にできないからだ。

よくある質問

クラスタの数はどう決めるのか

手法によって決め方が違う。k 平均法では人が数を決め、数を変えて損失の減り方を見るエルボー法や、シルエット係数を比べる方法がある。混合ガウスモデルでは、BIC という基準で数を選べると scikit-learn のガイドは書いている。ただし理論上、正しい数を取り戻せるのは、データが十分に多く、実際にガウス分布の混合から生まれたときに限る。階層的クラスタリングは、木を切る高さで数を決める。

k 平均法と DBSCAN はどう使い分けるのか

大きさのそろったクラスタが想定できるなら k 平均法が向く。クラスタの形が決まっておらず、外れ値を分けておきたいなら DBSCAN が候補になる。DBSCAN はクラスタの数を先に決めなくてよいが、eps の値をデータに合わせて選ぶ必要がある。

コサイン類似度とユークリッド距離はどちらを使うのか

人気のような、ベクトルの長さに出る影響を入れたくないなら、コサイン類似度が候補になる。Google の講座によると、ベクトルの長さを1にそろえれば、ユークリッド距離、コサイン類似度、内積は同等になる。

新しいデータも同じグループに振り分けられるのか

手法による。scikit-learn のガイドによると、k 平均法や混合ガウスモデルは新しいデータに当てはめられる。DBSCAN や階層的クラスタリングは、新しいデータに当てはめるようには作られていない。

関連する用語

出典

公開
執筆
TRAIL編集部(編集方針)