教師なし学習を1から — クラスタリングと次元削減
正解ラベルが1つも無いデータから構造を取り出す方法を、前提知識ゼロから。k-means・階層・DBSCANの向き不向き、PCAが何を最大化しているのか、そしてt-SNE/UMAPの図でやってはいけない3つの誤読までを、比喩→式→動く図→コードの順で解説する。
UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction
一次資料 — この記事の根拠
この解説の公開 2026-08-27
UMAP: Uniform Manifold Approximation and Projection for Dimension ReductionarXiv:1802.03426論文ページ·PDFVisualizing Data using t-SNEJMLR 2008論文ページ
正解がないデータの前で何ができるか
引っ越した先に、中身のラベルが剥がれた段ボールが100箱積まれているとします。何が入っているかは分かりません。それでもあなたは箱を開け、「これは台所のもの」「これは本」と似たもの同士をまとめることができます。正解表を渡されたわけではなく、中身の似方だけを頼りにしている。これがクラスタリングです。
もう1つやり方があります。各箱を「重さ」と「大きさ」の2つの数字だけで表し、床に並べて眺める。詳細は失われますが、全体の散らばりは一目で分かる。多くの属性を少ない軸に潰して人間が見られる形にする、これが次元削減です。
機械学習とは何かで扱った教師あり学習は「答え付きの問題集」でした。教師なし学習には答えがありません。この違いは重く、「正解率」という物差しが最初から存在しないことを意味します。この記事で挙げる落とし穴のほとんどは、ここから派生しています。
「似ている」は距離が決めている
コンピュータにとってデータは数値の並び、つまりベクトルです。似ている度合いは、その距離で測ります。よく使うのは、まっすぐな直線距離(ユークリッド距離、L2)と、長さを無視して向きだけを見るコサイン類似度です。
どちらを選ぶかで答えが変わります。埋め込みベクトルではベクトルの長さが「たくさん書いた」程度を表していることがあり、直線距離だと投稿数の多い人と少ない人が別グループに分かれて、話題の近さが見えません。ここはコサインの出番です。
より基本的な罠が単位の違いです。年収(数百万)と年齢(数十)を同じ表に並べて直線距離を測れば、桁の大きい年収がすべてを決め、年齢は無視されます。距離を使う手法では、列ごとに平均0・分散1へ揃える標準化が事実上の必須前処理です。忘れると「年収だけで分けた結果」を、それと気づかないまま「顧客セグメントが5つ見つかりました」と報告することになります。
k-means: 重心を置いて、寄せて、動かす
最も広く使われるクラスタリングが k-means です。手順は4行で書けます。
- クラスタ数 を決め、 個の点(重心)を適当な位置に置く
- 全データ点を、いちばん近い重心に割り当てる
- 各グループの平均位置へ重心を動かす
- 2と3を、重心が動かなくなるまで繰り返す
何を目指しているかは、1本の式で書けます。
は 番目のデータ点、 はその点が属するクラスタの番号、 はそのクラスタの重心、 は距離の2乗です。つまりこの式は、「全部の点について、自分が属するグループの中心からどれだけ離れているかを足し上げた合計」を言っているだけです。k-meansはこの合計をなるべく小さくする分け方を探しています。手順2(近い重心へ付け替える)も手順3(重心を平均へ動かす)も、必ずこの合計を減らすか同じに保つ操作なので、繰り返せばどこかで必ず止まります。
ただし「必ず止まる」と「最良の答えに着く」は別です。初期の重心をどこに置いたかで止まる場所が変わり、運が悪ければ不自然な分け方のまま固まります。これを緩和するのが k-means++(互いに離れた位置に初期重心を選ぶ)と n_init(違う初期値で何度かやり直し、合計が最小のものを採る)です。random_state を固定していないk-meansの結果が実行のたびに変わるのは、この初期値のせいです。
弱点は3つ。丸くて同じくらいの大きさの塊を暗に仮定していること(三日月が2つ絡んだ形には歯が立たない)、平均を使うので外れ値に引きずられること、 を先に人間が決めなければならないことです。
階層クラスタリング: 木を作って後から切る
を先に決めたくないときの選択肢が階層クラスタリングです。最初は全点がそれぞれ単独のクラスタで、いちばん近い2つを合体させる操作を、全部が1つの塊になるまで繰り返します。合体の履歴を木に描いたものがデンドログラムで、好きな高さで水平に切ればクラスタ数が決まる。分けてから数を決められるのが利点です。
効いてくるのが連結法(linkage)、つまり「クラスタ同士の距離」の定義です。単連結は最も近いペアの距離を使い、細長い形も繋げる代わりに、点が数珠つなぎになって全部が1本の鎖になる「連鎖効果」を起こしがちです。完全連結は最も遠いペアを見るのでまとまりの良い塊を作りますが、細長い構造は分断します。ウォード法は合体時の式(1)の の増分が最小になるペアを選ぶもので、既定値としてよく選ばれます。
弱点は計算量です。全ペアの距離を持つのでメモリが点数 の2乗に比例し、数万点を超えると素直には回りません。
コメント
コメントにはログインが必要です