主成分分析(PCA)とは — 直感・数学・実装までわかる完全ガイド

主成分分析(PCA)とは — 概要と直感

主成分分析(Principal Component Analysis: PCA)は、多変量データの次元削減と可視化、要約のために広く使われる線形手法です。観測された複数の変数間の相関構造を捉えて、データの分散を最もよく説明する直交方向(主成分)を見つけます。得られた主成分により、情報をできるだけ損なわずに次元を削減したり、データの構造(クラスタや異常値、傾向)を可視化したりすることができます。

数学的定式化(基本)

データ行列を X(各行がサンプル、各列が変数)とし、平均中心化(各変数から平均を引く)を行った後、共分散行列 C を計算します。

  • C = (1/(n-1)) X^T X(平均中心化済み)

PCA はこの共分散行列の固有値分解を行い、固有ベクトル(主成分の方向)と固有値(各主成分が説明する分散量)を求めます。固有値を大きい順に並べたベクトルにより、説明分散の大きい主成分順に成分を取り出します。

等価的に、平均中心化したデータ行列に対して特異値分解(SVD)を行うことでも主成分を得られます。SVD の利点は数値安定性と高速化アルゴリズム(大規模データへの適用)です。

主成分の性質

  • 主成分は互いに直交(相関がゼロ)である。
  • 第k主成分は、第1〜第(k−1)主成分と直交する中で分散が最大となる方向である。
  • 各固有値はその主成分がデータの分散に寄与する量を示し、全固有値の和は元のデータの総分散に等しい。
  • 主成分の符号は任意(±の反転でも同じ解釈)。順序は固有値の大小で決まる。

共分散行列 vs 相関行列(標準化の重要性)

変数が異なる単位・スケールを持つ場合、元データのままPCAを行うと分散の大きな変数が主成分を支配してしまいます。これを避けるために各変数を標準化(平均0・分散1)して相関行列に基づくPCAを行うのが一般的です。ただし、スケールそのものに意味がある(測定値の差が重要)場合は標準化しないことも選択肢です。

次元削減と再構成(最小二乗解)

上位 k 個の主成分を選び、それにデータを投影することで次元削減ができます。元データの近似は、選ばれた主成分空間に再投影することで得られ、PCA は与えられた次元数での再構成誤差(二乗和誤差)を最小にする最適解です。投影により失われる分散量は、捨てた固有値の和で表されます。

コンポーネントの選択基準

  • 累積寄与率:上位k成分で説明される分散の割合(例:70〜90% を目標とする場合が多い)。
  • スクリープロット:固有値の折れ曲がり(elbow)を視覚的に判断する。
  • カイザー基準:相関行列を使う場合、固有値が1以上の成分を残す(簡易的)。
  • ホーンのパラレル解析:ランダムデータの固有値と比較して実データの固有値が上回る成分を採用する(統計的により妥当)。

主成分の解釈(荷重とスコア)

  • 荷重(loadings):主成分ベクトルの各変数への係数。どの変数がその成分に強く寄与しているかを示す。
  • スコア(scores):各サンプルを主成分軸に投影した座標。これを使ってクラスタリングや可視化ができる。

ただし荷重の解釈は単純ではなく、複数の変数が混ざった線形結合である点や、回転(因子分析で行う varimax など)を行わない限り解釈性は限定的であることに注意が必要です。

実装上のポイントと大規模データへの対応

  • SVD を用いる実装(例:sklearn.decomposition.PCA)は数値安定で高速。高次元かつサンプル数が少ない場合やその逆の場合に有利な実装がある。
  • 部分的な主成分のみが必要なときは truncated SVD やランダム化 SVD(randomized PCA)を使うと計算量を減らせる。
  • インクリメンタルPCA(オンラインPCA)はストリーミングデータやメモリ制約がある場合に有効。

PCA の拡張と関連手法

  • カーネルPCA:非線形に分離された構造を扱うためにカーネル関数を使って高次元空間で線形PCAを行う。
  • スパースPCA:主成分の荷重を疎にして解釈性を高める手法。
  • 確率的PCA(Probabilistic PCA, PPCA):確率モデルとして定式化し、欠損値処理やベイズ的拡張が可能。
  • ロバストPCA:外れ値やノイズに対して頑健な分解(例:低ランク分解+スパース誤差分離)。
  • 因子分析(FA):PCA と似るがモデル前提(潜在因子と独自分散)と目標(共分散構造の説明)が異なる。

よくある誤解と注意点

  • PCAは「重要な特徴」を自動的に見つける万能の手法ではない。分散が大きい方向を優先するため、解析目的(分類、回帰、解釈など)に応じて有用性を評価する必要がある。
  • 線形手法であるため、非線形構造(曲線状や多峰性)を持つデータには不向き。カーネルPCAや非線形次元削減法(t-SNE, UMAP 等)を検討する。
  • 外れ値に敏感:外れ値が主成分を歪めるので前処理やロバスト手法の検討が必要。
  • カテゴリ変数の扱い:ダミー変換(one-hot)後でも解釈が難しくなることがある。カテゴリ変数の扱い方を工夫すること。

実務での利用例

  • 可視化:高次元データを2次元・3次元に縮約してパターンやクラスタ、異常点を視覚的に検出。
  • 前処理:機械学習モデルの特徴量次元を削減して学習時間を短縮・過学習を抑制。
  • データ圧縮・ノイズ除去:上位成分による再構成でノイズを除去する(画像圧縮、信号処理)。
  • 探索的データ解析:変数間の関連や潜在的な構造の把握。

実装の簡単な流れ(例)

  • データの収集・前処理(欠損値処理、スケーリング)
  • 平均中心化(および必要なら標準化)
  • 共分散行列を計算するか、SVD を実行
  • 固有値・固有ベクトルを得て、説明分散(寄与率)を確認する
  • 成分数を選択してデータを投影・再構成・評価する

結論

PCA はデータの次元削減と可視化において基本かつ強力な道具です。その数学的性質(分散最大化、最小二乗再構成)により多くの場面で有効ですが、前提(線形性、スケーリング、外れ値の影響など)を理解した上で適用する必要があります。用途に応じて、標準化の有無、成分選択の基準、あるいはカーネル/確率的/スパースなどの拡張手法の採用を検討してください。

参考文献