ねほり.com

何もないから何かみつかる

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

   

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

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

今回は、そんな話。

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

高校・大学の数学復習

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

「分散」とは、ある一次元のデータ(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*}

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

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

 - 2019年(社会人15年), 学業, テクノロジー

  関連記事

「ティッカー」アプリを作ってみました

東京、釣り無理 一足先に東京へ行った釣り仲間の A 氏から電話・・・ &nbsp …

不老不死に向けた研究はどこまで進んでいるか?

「不老不死」 それは、歴史上、中国・秦の始皇帝が追い求め、多くの独裁者にとっての …

Java Appletで麻雀ゲームを実装することに挑戦するも・・

やばいぞ~!!    最近本当に何もしていない~!&nbsp …

確定申告消費税未納の督促状が来た・・・

NTTドコモの基本使用料を最安値にしようとドコモショップへ。自分が「ベーシックプ …

CSVを読み込み外部データを使えるようにする方法(システムトレード)

「イザナミ」「システムトレードの達人」が羨ましいなぁ・・・と思っている機能の一つ …

printf関数が自作できないと「C言語が書ける」と言うなかれ

2005年07月10日(日) C言語 プリンタを購入。やっぱ必要になりました・・ …

【カキ養殖の歴史】広島県がカキ養殖発祥の地・・地区はどこ?(2/2)

海のミルクとも言われるほど、栄養価が高いことで人気の牡蠣。 今回は、前回の記事の …

広島テレビ局の一次書類審査の課題「常識と非常識」・・不合格

某テレビ局の第一次書類審査のテーマでした。     現在の「 …

イザナミ紹介のグランビルの法則の有効性検証(システムトレード)

風邪を引きました。エアコンが寒すぎる・・・。 夏なのに普段から長袖で、エアコンし …

ストリーミング動画 のファイルをダウンロードする方法

検索で偶然引っ掛かった誰かも知らない人の日記・・・    メ …