機械学習4:主成分分析

要点まとめ

主成分分析は、学習データ\boldsymbol{x}_iを最も情報量の多い軸、即ち分散の大きい軸に射影する。その変換ベクトル\boldsymbol{a}_jを求めるには、制約条件をノルムが1の条件\boldsymbol{a}_j^T \boldsymbol{a}_j= 1のもと、変換先の分散が最大となる条件を、ラグランジュの未定乗数法で解くと、\boldsymbol{a}_j\boldsymbol{x}_iの分散共分散行列Var(\bar{X})固有ベクトルとなり、固有値\lambdaが射影先の分散に対応する。

演習実施

f:id:yui-gen-ron:20211116144534p:plain

主成分分析の数式

学習データ

次数mのベクトル をn個考える

 \displaystyle{
  \displaystyle 
  \boldsymbol{x}_i = (x_{i1}, x_{i2}, \cdots, x_{im}) \in \mathbb{R}^m
}

ベクトルの平均

\boldsymbol{x}_i の成分毎の平均を持つベクトル

 \displaystyle{
  \displaystyle 
  \bar{\boldsymbol{x}} = \frac{1}{n} \sum_{i=1}^{n} \boldsymbol{x}_i
}

ベクトルの偏差

 \displaystyle{
  \displaystyle 
  \bar{X} = (\boldsymbol{x}_1 - \bar{\boldsymbol{x}}, \boldsymbol{x}_2 - \bar{\boldsymbol{x}}, \cdots, \boldsymbol{x}_n - \bar{\boldsymbol{x}})^T \in \mathbb{R}^{n \times m}
}

分散共分散行列

 \displaystyle{
  \displaystyle 
  \Sigma = Var (\bar{\boldsymbol{X}}) = \frac{1}{n} \bar{X}^T \bar{X}
}

※共分散は 偏差同士の積 の平均

線形変換後のベクトル

 \displaystyle{
  \displaystyle 
  \boldsymbol{s}_j = (s_{1j}, s_{2j}, \cdots , s_{nj})^T = \bar{X}\boldsymbol{a}_j \;\;\;\;\; \boldsymbol{a}_j \in \mathbb{R}^m
}

情報量を最大とする線形変換

線形変換後の情報量を最大にしたい、すなわち線形変換後の分散を最大としたい。

線形変換後の分散は

 \displaystyle{
  \displaystyle 
\begin{align}
  Var(\boldsymbol{s}_j) &= \frac{1}{n} \boldsymbol{s}_j^T \boldsymbol{s}_j \\
  &= \frac{1}{n} (\bar{X} \boldsymbol{a}_j)^T (\bar{X} \boldsymbol{a}_j) \\
  &= \frac{1}{n} \boldsymbol{a}_j^T \bar{X}^T \bar{X} \boldsymbol{a}_j \\
  &= \boldsymbol{a}_j^T Var(\bar{X}) \boldsymbol{a}_j
\end{align}
}

ここで、\boldsymbol{s}_j のノルムが1となる制約条件を入れて、分散を最大となるような条件を求める。

目的関数

 \displaystyle{
  \displaystyle 
  \arg \max_{\boldsymbol{a} \in \mathbb{R}^m} \boldsymbol{a}_j^T Var(\bar{X}) \boldsymbol{a}_j
}

制約条件

 \displaystyle{
  \displaystyle 
  \boldsymbol{a}_j^T \boldsymbol{a}_j = 1
}

ラグランジュの未定乗数法を用いて求める。

 \displaystyle{
  \displaystyle 
  E(\boldsymbol{a}_j) = \boldsymbol{a}_j^TVar(\bar{X}) \boldsymbol{a}_j - \lambda(\boldsymbol{a}_j^T \boldsymbol{a}_j - 1)
}

微分して0になる条件で解くと最適化問題の解となる。

 \displaystyle{
\newcommand{\partialdiff}[2] {\frac{\partial {#1}}{\partial{#2}}}
  \displaystyle 
  \partialdiff{E(\boldsymbol{a}_j)}{(\boldsymbol{a}_j)} = 2 Var(\bar{x}) - 2 \lambda \boldsymbol{a}_j = 0 \\
  Var(\bar{X}) \boldsymbol{a}_j = \lambda \boldsymbol{a}_j
}

この形は、\bar{X}固有ベクトル\boldsymbol{a}_j固有値\lambdaの関係となる。

次の式のように、射影先の分散を計算すると固有値\lambdaになることが確認できる。

 \displaystyle{
\begin{align}
  Var(\boldsymbol{s}_1)  &= \frac{1}{n} \boldsymbol{s}_1^T \boldsymbol{s}_1 \\
  &= \frac{1}{n} (\bar{X} \boldsymbol{a}_1)^T \bar{X} \boldsymbol{a}_1 \\
  &= \frac{1}{n} \boldsymbol{a}_1^T \bar{X}^T \bar{X} \boldsymbol{a}_1 \\
  &= \boldsymbol{a}_1^T Var({\bar{X}}) \boldsymbol{a}_1 \\
  &= \lambda_1
\end{align}
}

寄与率

元データの総分散 V_{total}は、射影先の次元の主成分の分散との和\sum_{i=1}^{m} \lambda_iと一致する。

 \displaystyle{
  \displaystyle 
  V_{total} = \sum_{i=1}^{m} \lambda_i
}

寄与率は第k主成分の分散の全分散に対する割合

 \displaystyle{
  \displaystyle 
  c_k = \frac{\lambda_k}{\sum_{i=1}^{m} \lambda_1}
}

累積寄与率は第k主成分までに圧縮した際の情報量の割合。

 \displaystyle{
  \displaystyle 
  r_k = \frac{\sum_{j=1}^{k} \lambda_j}{\sum_{i=1}^{m} \lambda_i}
}