ホーム » 機械学習 » ねぇPython、PCAって何?(理論編+2)

ねぇPython、PCAって何?(理論編+2)

こんにちは。前回、射影行列を学びました。n次元ベクトルaを考えよう。行列Vの列ベクトルが作る空間の中でもっともaに近いものはVcという形で表された。ただし、cは縦ベクトルとすると

(1)   \begin{align*} Vc =  V(V^TV)^{-1}V^Ta \end{align*}

となりこれがもっともaに近いヤツで

    \[V(V^TV)^{-1}V^T \]

Vの列ベクトルがはる空間への射影行列

だった。今回はそのVはどんなやつ?か考える。つまりどんなベクトルが作る空間へ射影すればいいんだ?ということ

データ\in \mathbb{R}^m(m次元)

平面を貼るベクトルをU=[v_1, \cdots, v_n]

ただしv_i \in \mathbb{R}^m , i=1,\cdots,n

とする。目標はUを見つけ出すこと。計算の前にいくつか確認しておこう。

  1. 実対称行列の固有ベクトルは直行
  2. 実対称行列は対角化可能
  3. グラムシュミットで正規直交基底が作れる
  4. tr(AB) = tr(BA)
  5. x^T A x = tr(x^T A x)

まず、3番より射影行列P_wは次のようになる

    \[P_w = U(U^TU)^{-1}U^T = UU^T\]

ではどうやってUを決定するかだが、前回同様、分散を最大化させる作戦でいこう。射影後の分散が最大化されるようにUを決定したいので

(2)   \begin{align*} \sum_{i=1}^{N} \|P_w x^{(i)} \|^2 &=& \sum_{i=1}^{N} \|UU^Tx^{(i)} \|^2     \\ &=& \sum_{i=1}^{N} (UU^Tx^{(i)})^T(UU^Tx^{(i)})     \\ &=& \sum_{i=1}^{N} x^{{(i)}^T}UU^TUU^Tx^{(i)}     \\ &=& \sum_{i=1}^{N} x^{{(i)}^T}UU^Tx^{(i)}         \\ &=& \sum_{i=1}^{N} tr(x^{{(i)}^T}UU^Tx^{(i)})       \\ &=& \sum_{i=1}^{N} tr(U^Tx^{(i)}x^{{(i)}^T}U)     \\ &=& tr(U^TXX^TU)      \\ &=& tr(U^T P^TDPU)      \\ &=& tr((PU)^T D (PU)) \end{align*}

ここで、対称行列XX^TP^TDPと変形しました。これを行列の対角化といいます。ここで、Pは固有ベクトルを基底とした空間から標準基底の空間への変換行列なんですが、重要なことは基底(軸)の取り方によって座標が変わるということでしたね。これを踏まえて

    \[tr((PU)^T D (PU))\]

を最大化させるUの形を考えよう!例えば

    \[  tr \left(  \begin{pmatrix} a  & b & c  \\ d  & e & f  \\  \end{pmatrix}   \begin{pmatrix} 12 & 0 & 0 \\ 0 & 7 & 0 \\ 0 & 0 & 1 \\   \end{pmatrix} \begin{pmatrix} a & d  \\ b & e  \\ c & f    \end{pmatrix}  \right)\]

において[a,b,c], [d,e,f]を正規直交とするときどんなものがトレースを最大化させるか?

e_1, e_2

しかないのは明らか。よってUの列ベクトルには固有ベクトルが並べばいいことがわかります。実際、例えばU=p_1が最大固有値 \lambda_1に対応する固有ベクトルとする時Pp_1e_1となる(Pが座標変換するから)

(3)   \begin{align*} tr((PU)^T D (PU)) = tr((Pp_1)^T D (Pp_1)) = tr(e_1^T D e_1) = \lambda_1 \end{align*}

となるからです。従って射影行列P_w=UU^TUは列ベクトルとして固有ベクトルを並べればいいことがわかりました。

次回はこれを実装で確かめましょう。

 

でわ

 


コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です