0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

主成分分析応用(カーネル主成分分析、特異値分解)

Last updated at Posted at 2025-02-02

主成分分析応用

この記事では主成分分析の応用として、
①カーネル主成分分析(Kernel PCA)の導出過程
②特異値分解(SVD)と PCA の比較
について説明します。


1. カーネル行列の固有値問題の導出

1.1 特徴空間での共分散行列の固有値問題

まず、入力データ $ x_1, x_2, \dots, x_N $ に対して、非線形写像 $\phi$ を適用し、特徴空間上のデータ点 $\phi(x_i)$ を得ます。
この特徴空間における共分散行列は、中心化済みのデータの場合(ここでは中心化済みであると仮定)に、

C = \frac{1}{N} \sum_{i=1}^{N} \phi(x_i) \phi(x_i)^T

と定義されます。これに対して、固有値問題は

C \, v = \lambda \, v

となります。ここで、$v$ は特徴空間内の固有ベクトル、$\lambda$ は対応する固有値です。


1.2 固有ベクトルを訓練データの線形結合で表現する仮定

高次元(あるいは無限次元)の特徴空間では、直接 $v$ を求めるのは困難です。そこで、再現核ヒルベルト空間 (RKHS) の性質表現定理 により、固有ベクトル $v$ は訓練データ ${\phi(x_i)}$ の線形結合で表現できると仮定します:

v = \sum_{i=1}^{N} \alpha_i \, \phi(x_i)

ここで、$\alpha_i$ は未知のスカラー係数であり、これらをまとめた係数ベクトルを $\boldsymbol{\alpha} = (\alpha_1, \alpha_2, \dots, \alpha_N)^T$ とします。


1.3 上記表現を固有値問題に代入する

固有値問題

C \, v = \lambda \, v

に、$v = \sum_{i=1}^{N} \alpha_i , \phi(x_i)$ を代入します。

1.3.1 左辺の展開

\begin{aligned}
C\, v &= \frac{1}{N} \sum_{j=1}^{N} \phi(x_j) \phi(x_j)^T \left( \sum_{i=1}^{N} \alpha_i \, \phi(x_i) \right) \\
&= \frac{1}{N} \sum_{j=1}^{N} \sum_{i=1}^{N} \alpha_i \, \phi(x_j) \left( \phi(x_j)^T \phi(x_i) \right) \\
&= \frac{1}{N} \sum_{j=1}^{N} \left( \sum_{i=1}^{N} \alpha_i \, k(x_j, x_i) \right) \phi(x_j)
\end{aligned}

ここで、カーネル関数

k(x_j, x_i) = \phi(x_j)^T \phi(x_i)

を利用しています。

1.3.2 右辺の展開

右辺は単に

\lambda \, v = \lambda \sum_{i=1}^{N} \alpha_i \, \phi(x_i)

となります。


1.4 基底の係数の比較

両辺は 一次独立の基底$\phi(x_j)$ の線形結合として表されているため、各 $j = 1, 2, \dots, N$ に対して、対応する係数が一致する必要があります。
すなわち、

\frac{1}{N} \sum_{i=1}^{N} \alpha_i \, k(x_j, x_i) = \lambda \, \alpha_j \quad \text{for } j=1,\dots,N.

これを行列形式で書くと、カーネル行列 $K \in \mathbb{R}^{N \times N}$(各成分 $K_{ji} = k(x_j, x_i)$)を用いて、

\frac{1}{N} K \, \boldsymbol{\alpha} = \lambda \, \boldsymbol{\alpha}

となります。両辺に $N$ を掛けると、

K \, \boldsymbol{\alpha} = N \lambda \, \boldsymbol{\alpha}

となります。


1.5 結果としての固有値問題

この変形により、元々特徴空間での固有値問題

C \, v = \lambda \, v

は、カーネル行列 $K$ の固有値問題

K \, \boldsymbol{\alpha} = N \lambda \, \boldsymbol{\alpha}

に帰着されます。これにより、明示的に高次元空間 $\phi(x)$ を計算せずとも、データ間の内積(カーネル関数)のみを用いて固有値分解が可能になります。


2. 特異値分解(SVD)を用いた PCA の解説

2.1 SVD を用いる理由

通常の主成分分析では、中心化したデータ行列 $X \in \mathbb{R}^{n \times d}$ に対して共分散行列

C = \frac{1}{n} X^T X

の固有値分解を行います。しかし、特徴量の次元 $d$ がサンプル数 $n$ より大きい場合、$d \times d$ の共分散行列の固有値分解は計算負荷が非常に高くなります。
そのため、特異値分解(SVD) を利用すると、共分散行列を明示的に計算することなく、直接データ行列 $X$ から主成分を抽出できます。


2.2 SVD の基本的な考え方

中心化したデータ行列 $X$ に対して SVD を実行すると、

X = U\, \Sigma\, V^T

と分解されます。ここで、

  • $U \in \mathbb{R}^{n \times r}$
    左特異ベクトル行列(サンプル空間の直交基底)

  • $\Sigma \in \mathbb{R}^{r \times r}$
    対角成分に非負の特異値 $\sigma_i$ ($ i = 1, 2, \dots, r $)を持つ行列

  • $V \in \mathbb{R}^{d \times r}$
    右特異ベクトル行列(特徴空間の直交基底)


2.3 特徴量次元が大きい場合の効率性

  • 大きな $d$ の場合
    $X^T X$ のサイズは $d \times d$ となるため、直接固有値分解を行うと計算負荷が高くなります。

  • 効率的な手法
    その代わり、$X X^T$(サイズ $n \times n$)の固有値分解を先に計算し、得られた左特異ベクトル $U$ から、以下の関係で右特異ベクトル $V$ を求める方法が有効です。

v_i = \frac{1}{\sigma_i} X^T u_i

この手法により、計算量やメモリ使用量を大幅に削減できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?