はじめてのパターン認識 9章（前半）

# 部分空間法
  
機械学習を行うために、マシーンに食わせるデータを準備します。
その際にデータの次元数（大きさ）が小さい方がより学習に効果的なので、
$d$次元特徴ベクトル空間を重要な情報をもつ$r(≤d)$次元空間に縮小します。
9章では、教師なし学習次元削除手法の
**主成分分析**、**特異値分解**、 **部分空間法**、**カーネル主成分分析**、**カーネル部分空間法**
について取り上げています。
**部分空間法**、**カーネル主成分分析**、**カーネル部分空間法**は難しいので後半に分けます。

なお、[はじめてのパターン認識 第４章 確率モデルと識別関数　前半（観測データの線形変換）](http://qiita.com/sobeit@github/items/7234455c5ef04c8feb5b)の話と通じていますので先にご覧ください。

## 9.1 部分空間 (Subspace)
ある構造を持った集合Xについて、空間と呼ばれる構造を保つための部分集合のこと。
**１次結合**　
　線形結合、線形和ともいう。ベクトルの定数倍と加え合わせ。
　例 2次元数ベクトル $V = (2,3)$と $W = (1,2)$を用いて、$2V + 3W$ としたら$(7,12)$というベクトルが作れる。

d次元ベクトル空間*V*の部分空間の定義は、
$x_1,....x_r (≤ d)$を$V$のベクトルとする$x_1,....x_r$の１次結合全体の集合。
$W = \{a_1x_1 + ... a_rx_r | a_i ∈ R, i = 1, ....r\}$ は$V$の部分空間となる。

つまり、$W$が$x_1,....x_r$で張られる$r$次元の部分空間であるとは$x_1,....x_r$は1次独立。
どの$x_i$も他の$r -1$個の$x_j (j ≠ i)$の**線形結合で表すことができない**ということである。

上記の部分空間の定義から、$W$が$V$の部分空間であるための必要十分条件は、
1. $W ≠ θ$
2. $x,y \in W \Rightarrow x + y \in W$
3. $x \in W, \lambda \in R \Rightarrow \lambda x \in W$
ということが成り立っている。
 
下記は部分空間への射影ベクトルとその直交成分
![alt](http://astamuse.com/ja/drawing/JP/2012/085/035/A/000018.png)

## 9.2 主成分分析 (Principal Component Analysis *PCA*)
**主成分分析**は**共分散行列**の**固有値問題**を解き、大きな固有値を持つ固有ベクトルで**部分空間**を構成して、元の情報を表現する。目的は，なるべく少ない合成変数で，なるべく多くの情報を把握するという**情報の縮約**である。

**分散 (variance)**
  各データが平均値（期待値）からどれだけ離れて散らばっているかを示すもの
  通常平均値とデータの距離の二乗の平均で求める

**共分散 (covariance)**
  複数の対応するデータ群での平均とデータ群内の各データの差を掛けあわせて平均を取ったもの

**分散・共分散行列 (variance・covariance matrix)**
  ある変数xの分散は共分散としてはxとxの共分散と表すことができるので、
  それらを含んだ共分散行列

**標準偏差 (standard deviation)**
  分散は符号の影響を排除し、ばらつきの大きさのみを見るため二乗しているもの
  標準偏差は元データの単位と同様になるよう分散の正の平方根を取ったもの

**固有値問題 (eigenvalue problem)**　
  線形変換の固有値、及び固有ベクトルを求める問題

**寄与率 (contributing rate)**
  観測データの全情報量に対してどの程度の情報量を個々の主成分が集めたかを示す比率

**累積寄与率 (cumulative contribution ratio)**
  比率が大きい順番に固有値を足し算をした積算量を全情報量で割り算した比率になっている
  取り上げたいくつかの主成分はもとの全情報量の何割になっているかを示す指標で、取り上げた主成分でどれくらい説明できたかどうか判断する指標

**第1主成分**
  X軸とY軸の散布図を書いて、点々の真中ほどに直線を引いたもの
  
**第2主成分**
  XとYの平均値（重心）を通って、第1主成分である直線に直角の線を引いたもの
  
![第1主成分と第2主成分の図](http://www.mindware-jp.com/basic/pca.gif)
  
学習データ$x_i=(x_i1,...x_id)^{\mathrm{T}}(i = 1,...,N)$の**分散が最大**になる方向への線形変換を求める手法。
*N*個のデータからなるデータ行列を$X = (x1,...x_N)^{\mathrm{T}}$、それから平均ベクトル$\bar{x}=(\bar{x_1}...,\bar{x_d})^{\mathrm{T}}$を引き算したデータ行列を$\bar{X}=(x_1 - \bar{x}....,x_N - \bar{x})^{\mathrm{T}}$とすると、

```math

\sum = Var\{\bar{X}\} = \frac{1}{N}\bar{X}^{\mathrm{T}}\bar{X}\
```
で定義される。
  
$N$個のデータ$x_i - \bar{x}$を$係数ベクトルa_j$ = $(a_{j1}...a_{jd})^{\mathrm{T}}(j = 1....,d)$を用いて線形変換すると、

```math

s_j = (s_{1j},....s_{Nj})^{\mathrm{T}} = \bar{Xa}_j
```
が得られる。この変換後のデータの散文は、$s_{1j},....s_{Nj}$の平均が0となるので、

```math
Var\{{s_j}\} = \frac{1}{N}{s}_j^Ts_j = \frac{1}{N}(\bar{Xa}_j)^{\mathrm{T}}(\bar{Xa}_j) = \frac{1}{N}{a}_j^T\bar{X}^{\mathrm{T}}\bar{Xa}_j = a_j^TVar\{{\bar{X}\}}a_j \
```
となる。この分散が最大となる射影ベクトルは、係数ベクトル$a_j$のノルムを1に制約した[ラグランジェ関数](http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%B0%E3%83%A9%E3%83%B3%E3%82%B8%E3%83%A5%E3%81%AE%E6%9C%AA%E5%AE%9A%E4%B9%97%E6%95%B0%E6%B3%95)

```math
E(a_j) = a_j^TVar\{{\bar{X}\}}a_j - \lambda(a_j^T - 1)
```
を最大にする$a_j$を見つければよい、$\lambda$はラグランジェ未定定数である、$a_j$で微分して0としておけば、

$\frac{\partial E(a_j)}{\partial a_j} = 2Var\{{\bar{X}\}}a_j - 2\lambda a_j = 0 $より$Var \\{\bar{X}\\}a_j = \lambda a_j$ (式9.2)

が得られる。これは、元のデータの共分散行列に関する**固有値問題**を解くことにより。分散最大となる射影ベクトル$a_j$が得られることを示している。
(式9.2)を解いて得られる固有値を$\lambda_1\geq...\geq\lambda_d$とし、対応する固有ベクトルを$a_1,...,a_d$とする。共分散行列が**実対称行列**であることから、固有ベクトルは相互に直交し、

```math
a^T_ia_j = \delta = \left\{\begin{array}{rcr} 1 & (i = j) \\ 0 & (i \neq j) \end{array}\right.
```
が成り立つ。$\delta$は[クロネッカーのデルタ](http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%8D%E3%83%83%E3%82%AB%E3%83%BC%E3%81%AE%E3%83%87%E3%83%AB%E3%82%BF)。
元のデータの共分散行列は$d$×$d$の行列なので、得られる非ゼロ固有値の数は共分散行列のランクで決まり、最大$d$である。最大固有値に対応する固有ベクトルで線形変換した特徴の分散は、

```math
Var\{{s_1}\} = a^T_1Var\{\bar{X}\}a_1 = \lambda _1a^T_1a_1 = \lambda _1
```
となり、最大固有値に一致する。最大固有値に対応する固有ベクトルで、線形変換された特徴量を**第1成分**という。$k$番目の固有値に対応する固有ベクトルで変換された特徴量を**第$k$主成分**という。変換された特徴量の分散は固有値に一致するので、**全分散量**は

```math
V_{total} = \sum_{i=1}^d \lambda _i
```
となり、これは元データのもつ全分散量とも一致する。第$k$主成分の分散の全分散に対する割合

```math
c_k = \frac{\lambda _k}{V_{total}}
```
を、第$k$成分の**寄与率**という。また、第$k$成分までの**累積寄与率**$\gamma _k$は

```math
\gamma _k = \frac{\sum_{i=1}^k \lambda _i}{V_{total}}
```
で定義される。

## 9.3 特異値分解　(Singular Value Decomposition *SVD*)
行列を複数の行列の積に分解する手法として、[グラム-シュミットの正規直交基底](http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E7%9B%B4%E4%BA%A4%E5%9F%BA%E5%BA%95)を得るための[QR分解](http://ja.wikipedia.org/wiki/QR%E5%88%86%E8%A7%A3)がある。一方、主成分分析に密接に関連した行列の分解法に**特異値分解**(SVD)がある。任意の$n \times p$行列$X$は、
$X = U \Lambda V^{\mathrm{T}}$

```math
= (u_1 u_2 ... u_p) 
  \left(
    \begin{array}{cccc}
      \sqrt{λ_1} & 0 & \ldots & 0 \\
      0 & \sqrt{λ_2} & \ldots & 0 \\
      \vdots & \vdots & \ddots & \vdots \\
      0 & 0 & \ldots & \sqrt{λ_p}
    \end{array}
  \right)

  \left(
    \begin{array}{cccc}
      \upsilon^T_1 \\
      \upsilon^T_2 \\
      \vdots \\
      \upsilon^T_p 
    \end{array}
  \right)

```
のように三つの行列の積に分解することができる。これを、特異値分解という。
ここで、$U$は$XX^{\mathrm{T}}$の非ゼロ固有値に対応する固有ベクトルからなる、$n \times p$**列正規直交行列**である。$V$は、$X^{\mathrm{T}}X$の非ゼロ固有値に対応する固有ベクトルからなる、$p \times p$列正規直交行列である。$\Lambda$は、$XX^{\mathrm{T}}$または$X^{\mathrm{T}}X$の非ゼロ固有値の平方根（**特異値**という）を、$\lambda_1\geq \lambda_2 \geq ... \geq \lambda_p$の順に並べて対角要素とした$p \times p$対角行列である。

特異値分解と主成分分析の関係は、$n \times p$行列$X$を$p$個の属性をもつ$n$個のデータ（あらかじめ平均ベクトルが引かれているものとする）と考えれば、$X^{\mathrm{T}}X$は共分散行列であり、その固有値と固有のベクトルが$\lambda _i$と $\upsilon _i$そのものになっていることから明らかである。また、$X= U \Lambda V^{\mathrm{T}}$より$XV = U \Lambda$が成り立つことから、

```math
(X\upsilon _1 \ \ X\upsilon _2 \ \ ... \ \ X\upsilon _p) = (\sqrt{\lambda _1 u_1} \ \ \sqrt{\lambda _2 u_2} \ \ ... \ \ \sqrt{\lambda _p u_p})
```

となる。データ行列を$\upsilon_1$で線形変換したベクトルが$\sqrt{\lambda_1u_1}$となるので、その分散は、

```math
Var\{{X_\upsilon{_1}}\} = (X_\upsilon{_1})^{\mathrm{T}}(X_\upsilon{_1}) = \left( \sqrt{\lambda _1 u_1} \right)^{\mathrm{T}}\left( \sqrt{\lambda _1 u_1} \right) = \lambda_1
```
となり、第1主成分の最大固有値に一致し最大となる。
第1主成分から第$q(\leq p)$主成分までの$\upsilon_i$で構成された部分空間

```math
\tilde{V} = (\upsilon_1 \ \ ... \upsilon_q)
```
へのデータ$X$の射影は$X\tilde{V}$は、共分散行列が

```math
Var{\{X\tilde{V}\}} = (X\tilde{V})^{\mathrm{T}}(X\tilde{V}) = \tilde{V}^{\mathrm{T}}X^{\mathrm{T}}X\tilde{V} = \tilde{V}^{\mathrm{T}}V\Lambda^{\mathrm{T}}U^{\mathrm{T}}U\Lambda\tilde{V}^{\mathrm{T}}\tilde{V} \\ = \tilde{V}^{\mathrm{T}}V\Lambda^{\mathrm{2}}V^{\mathrm{T}}\tilde{V}
```
となる。$\tilde{V}^{\mathrm{T}}V$は、

```math
\tilde{V}^{\mathrm{T}}V =   \left(
    \begin{array}{cccc}
      \upsilon^T_1 \\
      \vdots \\
      \upsilon^T_q 
    \end{array}
  \right) \ \ 
(\upsilon_1 \ \ ... \upsilon_q) =   \left(
    \begin{array}{cccc}
      1 & 0 & \ldots & 0 & 0 & \ldots & 0 \\
      0 & 1 & \ldots & 0 & 0 & \ldots & 0 \\
      \vdots & \ddots & \ddots & 0 & \vdots & \vdots & \vdots \\
      0 & \ldots & 0 & 1 & 0 & \ldots & 0
    \end{array}
  \right)
```
となるので、共分散行列は、

```math
Var\{X\tilde{V}\} = \lambda^2_q
```

となる。$\Lambda_q$は、特異値分解の最初の$q$個の特異値以外を0とした対角行列である。$\Lambda$の代わりに$\Lambda_q$を用いた行列の分解

```math
\tilde{X} = U\Lambda_qV^{\mathrm{T}} = \sum_{i=1}^q \sqrt{\lambda _i u_i u^T_i}
```
は、$X$のランク$q$の**誤差最小という意味での最良近似**となっている。

# 著書
> [はじめてのパターン認識](http://goo.gl/fgz3b4)

# 参考資料
* [はじめてのパターン認識 第４章 確率モデルと識別関数　前半（観測データの線形変換）](http://qiita.com/sobeit@github/items/7234455c5ef04c8feb5b)
* [主成分分析の基礎知識](http://home.a02.itscom.net/coffee/tako04.html)
* [主成分分析](http://aoki2.si.gunma-u.ac.jp/lecture/PCA/index.html)
* [数式記号の読み方・表し方](http://izumi-math.jp/sanae/report/suusiki/suusiki.htm)
* [相関係数の数式](http://www.koka.ac.jp/morigiwa/sjs/correlation_equation.htm)
* [行列・行列式の数学的基礎](http://www.aichi-gakuin.ac.jp/~chino/app.html)
* [行列と総和規約](http://solid4.mech.okayama-u.ac.jp/%E8%A1%8C%E5%88%97%E3%81%A8%E7%B7%8F%E5%92%8C%E8%A6%8F%E7%B4%84.pdf)