UMAP

2.6.7

UMAP

最終更新 2026-03-03 読了時間 2 分
まとめ
  • UMAP(Uniform Manifold Approximation and Projection)はリーマン幾何とトポロジーに基づき、高次元データの局所・大域構造を保って低次元に写像する。
  • t-SNE より高速(O(N) に近い)で、大規模データ(数十万点以上)にもスケールする。
  • 次元削減だけでなく、クラスタリングの前処理や教師あり次元削減(ラベル活用)にも使える。
  • t-SNE — UMAP と比較されることが多い非線形次元削減
  • PCA — 線形次元削減の基本

直感 #

t-SNE は近い点同士の関係を保つが、遠い点のクラスター間距離は信頼できない。UMAP は「高次元でのトポロジー(接続構造)を低次元でも維持する」ことを目的関数にしているため、クラスター間の相対的な距離も意味を持ちやすい。

詳細な解説 #

ライブラリとデータ #

1
2
3
4
5
6
7
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
import umap

digits = load_digits()
X, y = digits.data, digits.target

基本的な次元削減 #

1
2
3
4
5
6
7
8
reducer = umap.UMAP(n_neighbors=15, min_dist=0.1, n_components=2, random_state=42)
embedding = reducer.fit_transform(X)

plt.figure(figsize=(8, 6))
scatter = plt.scatter(embedding[:, 0], embedding[:, 1], c=y, cmap="tab10", s=5, alpha=0.7)
plt.colorbar(scatter, label="Digit")
plt.title("UMAP — Digits Dataset")
plt.show()

主要パラメータ #

パラメータ意味効果
n_neighbors局所構造の範囲(近傍数)小→局所構造重視、大→大域構造重視
min_dist低次元での最小距離小→密なクラスター、大→均一に散らばる
metric距離関数“euclidean”, “cosine”, “manhattan” など
n_components出力次元数2(可視化)、10-50(前処理)

t-SNE との比較 #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from sklearn.manifold import TSNE

tsne = TSNE(n_components=2, perplexity=30, random_state=42)
tsne_embedding = tsne.fit_transform(X)

fig, axes = plt.subplots(1, 2, figsize=(14, 5))
axes[0].scatter(embedding[:, 0], embedding[:, 1], c=y, cmap="tab10", s=5)
axes[0].set_title("UMAP")
axes[1].scatter(tsne_embedding[:, 0], tsne_embedding[:, 1], c=y, cmap="tab10", s=5)
axes[1].set_title("t-SNE")
plt.tight_layout()
plt.show()

教師あり UMAP #

1
2
reducer_supervised = umap.UMAP(n_neighbors=15, min_dist=0.1, random_state=42)
embedding_sup = reducer_supervised.fit_transform(X, y=y)

UMAP vs t-SNE vs PCA #

手法速度大域構造の保持大規模データ新規データの transform
PCA最速○(線形のみ)
t-SNE遅い
UMAP速い
  • t-SNE — 局所構造重視の可視化手法
  • PCA — 線形次元削減の基本
  • HDBSCAN — UMAP の出力にクラスタリングを適用