主成分分析 (PCA)
概要
主成分分析(Principal Component Analysis, PCA)は、複数の変数から構成される高次元データを、互いに直交する少数の主成分(principal component)軸へ線形変換し、次元を削減する統計手法である。1901年にカール・ピアソン(Karl Pearson)が幾何学的観点から初めて提唱し、1933年にハロルド・ホテリング(Harold Hotelling)が現代的形態として確立した。データの分散を最大限に保持する方向を探すという点で、情報損失を最小限に抑えながら可視化・ノイズ除去・計算効率の向上を同時に達成できるため、統計学・機械学習・バイオインフォマティクス・神経科学など、ほぼすべてのデータ駆動型分野の標準的ツールとして定着している。
主要な内容
定義と直感
PCAの中心的な考え方は、「データが最も広く散らばっている方向が最も多くの情報を含んでいる」というものである。たとえば身長と体重のように強く相関する2つの変数は、事実上1つの情報軸に要約できる。PCAは元の変数の線形結合によって新しい軸(主成分)を作り、分散が大きい順にPC1、PC2、PC3…と並べる。上位いくつかの主成分だけを残せば、元データの構造を大部分維持しながら変数の個数を大幅に減らせる。
数学的原理
1. 標準化: 変数ごとに単位が異なると分散が大きい変数が結果を支配するため、平均0・標準偏差1に正規化する。
2. 共分散行列の計算: 変数間の共分散行列 Σ を求める。
3. 固有値分解: Σv = λv を満たす固有値(eigenvalue)λと固有ベクトル(eigenvector)vを計算する。固有値はその主成分が説明する分散の大きさ、固有ベクトルは軸の方向を意味する。
4. 射影: 固有値が大きい順にk個の固有ベクトルを選び、データを射影するとk次元への削減が完了する。
実務では共分散行列の代わりに特異値分解(SVD)を使うことが多い。SVDは数値的に安定しており、欠測値がある場合や変数数が標本数より多い場合にも適用可能だからである。
説明分散とスクリープロット
各主成分が全体の分散に占める割合を説明分散比(explained variance ratio)という。主成分番号をx軸、固有値をy軸に置いて描いたスクリープロット(scree plot)で、曲線が緩やかになる「肘(elbow)」の地点が適切な主成分数の基準となる。累積説明分散80〜90%を基準にする方法も広く使われる。
主な活用分野
- 次元削減と可視化: 数十〜数百次元のデータを2次元平面に射影し、クラスター構造を確認する。
- ノイズ除去: 分散が小さい主成分は通常ノイズであるため、捨てることで信号対雑音比を高める。
- 特徴抽出の前処理: 回帰・分類モデルに入力する前に多重共線性を緩和し、学習速度を高める。
- バイオインフォマティクス: 遺伝子発現データ(GTEx、TCGA)においてサンプルの異質性やバッチ効果(batch effect)を診断・補正する。
- 顔認識: 古典的な固有顔(eigenface)法の基盤となった。
長所と短所
長所は、実装が単純で計算が速く、結果の軸が互いに直交するため解釈が明快である点である。一方、主成分は元の変数の線形結合であるため物理的・生物学的意味を与えにくく、分散が大きいからといって必ずしも予測に有用な情報である保証はない。またPCAは線形変換に限定され、外れ値に敏感で、クラスラベルを考慮しないという限界がある。
最新動向
2024〜2025年に入り、PCAは単独の手法というよりも前処理・解釈ツールとして再注目されている。第一に、大規模言語モデル(LLM)の埋め込みベクトルをPCAで削減して意味空間を可視化したり、活性化空間から特定の概念方向を抽出したりする解釈可能性(interpretability)研究が活発である。第二に、単一細胞RNAシーケンシング(scRNA-seq)解析パイプライン(Seurat、Scanpy)においてPCAは依然としてUMAP・t-SNEの前段階の標準として使われ、拡張PCA・確率的PCAといった変種がバッチ効果補正に活用されている。第三に、カーネルPCA・スパースPCA(SPCA)・ロバストPCAなど非線形・スパース・頑健な変種がオートエンコーダーと結合し、高次元の金融・医療データに適用されている。第四に、連合学習環境で生データを共有せずにPCAを実行する分散・プライバシー保護アルゴリズムが注目を集めている。一方、データ規模が大きくなるにつれて、ランダム化SVD・増分PCA(Incremental PCA)のような拡張性手法が実務標準として定着した。
関連トピック
- [[特異値分解]]
- [[次元削減]]
- [[機械学習]]
- [[t-SNE]]
- [[因子分析]]