主成分分析が固有値問題となる理由

行列には「固有値」や「固有ベクトル」、統計には「分散」や「共分散」があるというのは、理系の大卒なら誰でも知っている。

しかし、数学として固有方程式を解く方法だけ学んでも、結局何のためにあるのかわからないまま終わってしまう。

今回は、そんな話。

※ 色々と式を書き直してましたが「株式会社アイデミー」様のサイトの詳しさに叶わず、ほぼ参考にしてます。

高校・大学の数学復習

分散・共分散・共分散行列

「分散」とは、ある一次元のデータ(x_1,x_2,x_3)に対し平均値\bar{x}からの差の2乗和の平均である。

式で書けば次のようになる。

\sigma_{xx} = \frac{ (x_1-\overline{x})^2+(x_2-\overline{x})^2+(x_3-\overline{x})^2 }{3}

分散はデータのバラつきを表している(式や定義から自明)。

「共分散」とは、ある多次元のデータ((x_1,y_1),(x_2,y_2),(x_3,y_3))に対して、平均\bar{x}または\bar{y}からの差の積平均である。

式で書けば次のようになる。

\sigma_{xy} = \frac{ (x_1-\overline{x})(y_1-\overline{y})+(x_2-\overline{x})(y_2-\overline{y})+(x_3-\overline{x})(y_3-\overline{y}) }{3}

共分散は、xデータとyデータの相関度合いを示すものである。

さらに、「分散」と「共分散」を要素として並べた「共分散行列」は次のようになる。

\Sigma &=& \left( \begin{array}{cc} \sigma_{xx} & \sigma_{xy} \\ \sigma_{xy} & \sigma_{yy} \end{array} \right)

={\scriptsize \frac{1}{3} \left( \begin{array}{cc} (x_1-\overline{x})^2+(x_2-\overline{x})^2+(x_3-\overline{x})^2 & (x_1-\overline{x})(y_1-\overline{y})+(x_2-\overline{x})(y_2-\overline{y})+(x_3-\overline{x})(y_3-\overline{y}) \\ (x_1-\overline{x})(y_1-\overline{y})+(x_2-\overline{x})(y_2-\overline{y})+(x_3-\overline{x})(y_3-\overline{y}) & (y_1-\overline{y})^2+(y_2-\overline{y})^2+(y_3-\overline{y})^2 \end{array} \right) }

共分散行列は行列の構成要素を「単に並べただけ」である。

何それ美味しいの?

例えば、下段の分布のように分散共分散行列の「共分散」部分が(0, 0)の分布の場合、相関は見られない。

要するに、共分散行列が分かると共分散行列に用いられている乱数の分布が分かる。

固有値・固有ベクトル

正方行列A(※縦の長さと横の長さが等しい行列)に対して、

A \overrightarrow{x} = \lambda \overrightarrow{x}

となる \lambda を固有値(eigen value)、\overrightarrow{x} を固有ベクトルと呼ぶ。

\overrightarrow{x}とは、「行列 A を掛けても、\lambda 倍されるだけで方向が変わらないベクトル」を意味する。

例えば\left( \begin{array}{cc} 1 &2 \\ 3 & 4 \end{array} \right)が与えられた時、次の固有方程式

(1)   \begin{eqnarray*} \left( \begin{array}{cc} 1 &2 \\ 3 & 4 \end{array} \right) \left( \begin{array}{c} x \\ y \end{array} \right) = \lambda \left( \begin{array}{c} x \\ y \end{array} \right) \end{eqnarray*}

を満たす固有値\lambdaと固有ベクトル\left( \begin{array}{c} x \\ y \end{array} \right)を求めよ。

という問題は、理系大学生なら解いた経験があるだろう。

「固有値問題」とは、この固有値・固有ベクトルを見つける問題である。

さらに、この2つの概念(共分散行列、固有値問題)を応用する例の1つが「主成分分析」である。

主成分分析(principal component analysis:PCA)とは?

与えられたデータの傾向から自動的に特徴量を見つけ出し、その特徴を良く表す低次元データへと次元圧縮を行うのが「主成分分析」である。

これはある種の機械学習であり、特に自動的に特徴量を見出すという点において、「教師なし学習」と分類される。

主成分分析(PCA)の目的

  • データの特徴抽出(データのバラつきが大きい部分に着目することでよいデータを識別しやすくする)
  • データの次元圧縮(データのバラつきが少ない部分はデータに共通するパターンなのであまり意味をなさない(無視))
  • 多次元特徴量の可視化(多次元データは人間には認識不可、データのバラつきが大きところを見ることでデータの関係性を把握)

主成分分析がなぜ分散共分散行列を対角化する固有値問題となるか?

ここから本題。

3つの二次元データ

\vec{a}_1 = \left( \begin{array}{c} a_{1x} \\ a_{1y} \end{array} \right), \vec{a}_2 = \left( \begin{array}{c} a_{2x} \\ a_{2y} \end{array} \right), \vec{a}_3 = \left( \begin{array}{c} a_{3x} \\ a_{3y} \end{array} \right)
についての主成分分析を考えてみよう。簡単のため、重心が原点(0,0)となるようなデータであるとしている。

今後のために、次のようにデータ成分を並べた行列を定義しておく。

(2)   \begin{eqnarray*} X &\equiv& \left( \begin{array}{c} \vec{a}_1^\mathrm{T} \\ \vec{a}_2^\mathrm{T} \\ \vec{a}_3^\mathrm{T} \\ \end{array} \right) \\ &=& \left( \begin{array}{cc} a_{1x} & a_{1y} \\ a_{2x} & a_{2y} \\ a_{3x} & a_{3y} \\ \end{array} \right) \end{eqnarray*}

転置行列X^{\mathrm{T}}との積X^{\mathrm{T}} Xを計算してみると、

X^{\mathrm{T}}X &=& \left( \begin{array}{ccc} a_{1x} & a_{2x} & a_{3x} \\ a_{1y} & a_{2y} &a_{3y} \\ \end{array} \right) \left( \begin{array}{ccc} a_{1x} & a_{1y} \\ a_{2x} & a_{2y} \\ a_{3x} & a_{3y} \\ \end{array} \right) \\ &=& \left( \begin{array}{ccc} a_{1x}^2+a_{2x}^2+a_{3x}^2 & a_{1x}a_{1y}+a_{2x}a_{2y}+a_{3x}a_{3y} \\ a_{1x}a_{1y}+a_{2x}a_{2y}+a_{3x}a_{3y} & a_{1y}^2+a_{2y}^2+a_{3y}^2 \\ \end{array} \right)

最終的な表式が、「共分散行列の形(1/データ数の因子を除く)」になっていることがわかる。

共分散行列は、以降のためにに\Sigmaとして定義しておく。

(3)   \begin{eqnarray*} \Sigma \equiv \frac{1}{3} X^{\mathrm{T}}X \end{eqnarray*}

単位ベクトルにデータを射影した時の分散を計算


ある方向の単位ベクトルを\vec{e} = \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right)と表す。

まず、データを\vec{e}の方向に射影して、1次元データとなった後の分散値の表式を求める。

\vec{a}_1\vec{e}に射影した値は\vec{a}_1\cdot \vec{e}のようにベクトルの内積を取ることで簡単に計算でき、これを用いて分散(var)を計算すると、次式になる(平均値は0となる)。

(4)   \begin{eqnarray*} \mathrm{var} = \frac{ (\vec{a}_1\cdot \vec{e})^2 + (\vec{a}_2\cdot \vec{e})^2 + (\vec{a}_3\cdot \vec{e})^2}{3} \end{eqnarray*}

これを行列の積の形に分解して表現してみると、次式になる。

実は、この分解した行列がそれぞれ(X \vec{e})とその転置行列(X \vec{e})^\mathrm{T}になっている。

\mathrm{var} &=& \frac{1}{3} \left( \begin{array}{ccc} \vec{a}_1\cdot \vec{e} & \vec{a}_2\cdot \vec{e} & \vec{a}_3\cdot \vec{e} \end{array} \right) \left( \begin{array}{c} \vec{a}_1\cdot \vec{e} \\ \vec{a}_2\cdot \vec{e} \\ \vec{a}_3\cdot \vec{e} \end{array} \right)

次に行列の性質を用いて、X^\mathrm{T} Xという並びを出現させる。

(5)   \begin{eqnarray*} &=& \frac{1}{3} (X \vec{e})^\mathrm{T} (X \vec{e}) \\ &=& \frac{1}{3} \vec{e}^\mathrm{T} X^\mathrm{T} X \vec{e} \\ &=& \vec{e}^\mathrm{T} \Sigma \, \vec{e} \end{eqnarray*}

これは上で計算した共分散行列\Sigmaである。

varが最大になる方向を求める

さて、主成分分析ではこのvarを最大化するような\vec{e}を求めることが目的であった。

また、\vec{e}には単位ベクトル、つまりノルムが1であるという制約条件も付いている。

このように、ある制約条件のもとで、関数の最大(最小)を決定する時には、「ラグランジュの未定乗数法」というものがよく用いられる。

ラグランジュの未定乗数法:

変数x,yについて、「g(x,y)=0」の制約条件下で「f(x,y)」という関数を最大(小)化するのは、

L(x,y,\lambda) \equiv f(x,y) - \lambda g(x,y)

という関数を定義した時に、

\frac{\partial L}{\partial x} = 0, \frac{\partial L}{\partial y} = 0,\frac{\partial L}{\partial \lambda} = 0

を満たすような解(x,y)である。

ラグランジュの未定乗数法を用いると、

(6)   \begin{eqnarray*} L(e_{x} ,e_{y} , \lambda ) &\equiv& \mathrm{var} - \lambda (e_x^2 + e_y^2 -1 ) \\ &=& \left( \begin{array}{cc} e_{x} & e_{y} \end{array} \right) \Sigma \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right) - \lambda (e_x^2 + e_y^2 -1 ) \end{eqnarray*}

と定義した関数L(e_{x} ,e_{y} , \lambda )に対して、

(7)   \begin{eqnarray*} \frac{\partial L(e_{x} ,e_{y} , \lambda )}{\partial e_x} = 0 \\ \frac{\partial L(e_{x} ,e_{y} , \lambda )}{\partial e_y} = 0 \end{eqnarray*}

が成立するようなe_{x} ,e_{y}を見つければよい。

\frac{\partial L(e_{x} ,e_{y} , \lambda )}{\partial e_x},\frac{\partial L(e_{x} ,e_{y} , \lambda )}{\partial e_y}を計算すると、

\frac{\partial L(e_{x} ,e_{y} , \lambda )}{\partial e_x} &=& \left( \begin{array}{cc} 1 &0\end{array} \right) \Sigma \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right) + \left( \begin{array}{cc} e_{x} & e_{y} \end{array} \right) \Sigma \left( \begin{array}{c} 1 \\ 0 \end{array} \right) - 2 \lambda e_x \\

(8)   \begin{eqnarray*} &=& \left( \begin{array}{cc} 1 &0\end{array} \right) \Sigma \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right) + \left[ \left( \begin{array}{cc} e_{x} & e_{y} \end{array} \right) \Sigma \left( \begin{array}{c} 1 \\ 0 \end{array} \right) \right] ^{\mathrm{T}} - 2 \lambda e_x \\ &=& \left( \begin{array}{cc} 1 &0\end{array} \right) \Sigma \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right) + \left( \begin{array}{cc} 1 &0\end{array} \right) \Sigma^\mathrm{T} \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right) - 2 \lambda e_x \\ &=& 2 \left( \begin{array}{cc} 1 &0\end{array} \right) \Sigma \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right) - 2 \lambda e_x  \end{eqnarray*}

\frac{\partial L(e_{x} ,e_{y} , \lambda )}{\partial e_y}&=& 2 \left( \begin{array}{cc} 0 &1 \end{array} \right) \Sigma \left( \begin{array}{c} e_{x}  e_{y} \end{array} \right) - 2 \lambda e_y

であり、これらが0になるので次式に変形できる。

(9)   \begin{eqnarray*} \left( \begin{array}{cc} 1 &0\end{array} \right) \Sigma \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right) &=& \lambda e_x \\ \left( \begin{array}{cc} 0 &1\end{array} \right) \Sigma \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right) &=& \lambda e_y \end{eqnarray*}

2つの方程式をまとめると次式になる。

(10)   \begin{eqnarray*} \left( \begin{array}{cc} 1 &0 \\ 0 & 1\end{array} \right) \Sigma \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right) &=& \lambda \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right) \end{eqnarray*}

一番左の行列はただの単位行列なので省略すると次式になる。

(11)   \begin{eqnarray*} \Sigma \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right) &=& \lambda \left( \begin{array}{c} e_{x} \\ e_{y} \end{array} \right) \end{eqnarray*}

これは共分散行列Σに対する固有方程式である。

以上より、「主成分分析」が「固有値問題」へ帰着されることが証明された。

タイトルとURLをコピーしました