Dimensionality Reduction
次元削減は、PCA、t-SNE、UMAP、オートエンコーダーなどの手法を用いて、データの構造を保ちながら、多数の特徴をはるかに少数の特徴へ写像します。
次元削減とは、多数の特徴量で表現されたデータを、分散、点間の距離、近傍関係など、重要な情報を保つ少数の特徴量による表現に変換することです。640x640のカラー画像には120万を超える画素値があり、遺伝子発現プロファイルには20,000件の測定値が含まれることがあり、画像の埋め込みは数百次元になることもあります。次元を削減すると機械学習モデルが高速になり、過学習のリスクやストレージを削減できます。また、データ可視化のためにデータを2次元または3次元でプロットできるようになります。
次元を減らす利点#
Richard Bellmanは、動的計画法の研究で、次元が増えるにつれて問題が難しくなる様子を表す「次元の呪い」という言葉を作りました。特徴量が1つ増えるごとに空間の体積は指数関数的に増えるため、固定量のトレーニングデータが空間をますます疎にしか覆えなくなります。また、非常に高次元ではランダムな点同士の距離がほぼ等しくなり、k近傍法やk-meansクラスタリングなど、距離に基づく手法の有効性が低下します。
実際のデータが空間を隅々まで満たすことはほとんどありません。手書き数字の画像は、主に線の太さ、傾き、その他いくつかの要因によって変化するため、画素空間内のはるかに低次元な曲面、つまり多様体の近くに分布します。次元削減では、その曲面上の座標を求めます。ラベルが不要なため、ほとんどの手法は教師なし学習に分類されます。
線形手法と非線形手法#
Karl Pearsonが1901年に発表した主成分分析(PCA)は、データを分散の説明量が大きい順に並んだ直交方向へ回転させ、先頭の数個を残します。累積説明分散比から、データセットに必要な成分数が分かります。1936年にRonald Fisherが発表した線形判別分析は、クラスラベルを使い、クラスを最もよく分離する方向を見つけます。ランダム射影ではデータにランダム行列を掛けます。Johnson-Lindenstraussの補題によると、nに対数的にしか増えない次元数を使うことで、n個の点の距離を指定した許容誤差内に保てます。
非線形手法では、曲がった多様体をたどります。Isomapと局所線形埋め込みはどちらも2000年にScienceで発表され、多様体に沿った距離と局所的な線形近傍を保持します。t-SNEとUMAPは、類似する点を2Dマップ上で近くに配置するため、埋め込みのクラスターを可視化する標準的なツールです。ただし、マップ上で大きく離れたクラスター間の距離には、ほとんど意味がありません。オートエンコーダーは、各入力を小さな潜在空間のコードに変換するエンコーダーと、入力を再構成するデコーダーを学習します。Geoffrey HintonとRuslan Salakhutdinovは2006年に、ディープオートエンコーダーが画像や文書に対してPCAより優れたコードを生成することを示しました。
この例では、8x8の数字画像を64個のピクセル特徴量から、分散の90%を保持する最小数の主成分に圧縮し、その後、圧縮前と圧縮後のそれぞれでk近傍法により数字を分類します。
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline
X, y = load_digits(return_X_y=True) # 1,797 images of 8x8 pixels = 64 features
# Keep the fewest principal components that explain 90% of the variance
pca = PCA(n_components=0.90).fit(X)
print(f"Features: {X.shape[1]} -> {pca.n_components_}")
# Classify with k-nearest neighbors on the raw pixels and on the reduced features
raw = cross_val_score(KNeighborsClassifier(), X, y).mean()
reduced = cross_val_score(make_pipeline(PCA(n_components=0.90), KNeighborsClassifier()), X, y).mean()
print(f"Accuracy: {raw:.3f} with 64 features, {reduced:.3f} with {pca.n_components_}")21個の主成分で分散の90%を保持できます。特徴量を3分の1にしても、交差検証の精度は0.963から0.959にわずかに低下するだけです。パイプライン内でPCAを適合させると、各学習フォールドのデータだけから射影を学習するため、テストフォールドの情報が漏洩しません。
特徴選択と特徴抽出#
特徴選択では、冗長なセンサーチャネルを取り除くなど、元の列の一部を残すため、残った特徴量の意味は変わりません。より狭義の次元削減は特徴抽出であり、元の特徴量を組み合わせて新しい特徴量を作ります。通常、より高い圧縮率を得られますが、解釈は難しくなります。どちらもデータ前処理と特徴量エンジニアリングの工程です。ディープネットワークは学習の一環として抽出を行い、ピクセルを埋め込みに圧縮します。また、Matryoshka表現学習では、先頭の次元だけでも機能する埋め込みを学習するため、ベクトルデータベースに短いベクトルを格納できます。
コンピュータービジョンでの用途#
コンピュータービジョンでは、複数の段階で縮約表現を利用します。画像埋め込みをt-SNEまたはUMAPで2Dに射影すると、クラスが分離されているか、外れ値がどこに位置するかを確認できます。また、PCAやベクトル量子化により、ベクトル検索で使う埋め込みを小さくすれば、数百万枚の画像をメモリに収められます。YOLO26のインスタンスセグメンテーションモデルは、この考え方を出力に取り入れています。ヘッドは入力解像度の4分の1で画像ごとに32個のプロトタイプマスクを計算し、オブジェクトごとに32個の係数だけを予測します。各オブジェクトのマスクはプロトタイプの重み付き和となるため、640ピクセル入力に対する160x160マスク(25,600個の値)を32個の数値で表現できます。










