主成分分析応用（カーネル主成分分析、特異値分解）

# 主成分分析応用

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

---

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

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

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

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

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

```math
C \, v = \lambda \, v
```

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

---

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

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

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

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

---

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

固有値問題

```math
C \, v = \lambda \, v
```

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

#### 1.3.1 左辺の展開

```math
\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}
```

ここで、カーネル関数

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

を利用しています。

#### 1.3.2 右辺の展開

右辺は単に

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

となります。

---

### 1.4 基底の係数の比較

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

```math
\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)$）を用いて、

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

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

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

となります。

---

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

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

```math
C \, v = \lambda \, v
```

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

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

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

---

## 2. 特異値分解（SVD）を用いた PCA の解説

### 2.1 SVD を用いる理由

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

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

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

---

### 2.2 SVD の基本的な考え方

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

```math
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$ を求める方法が有効です。

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

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