旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

固有値、固有ベクトルのイメージ

行列をかけるとは

固有値固有ベクトルの計算方法は確か高校の時に習ったような気がしますし、OpenCV等既存のライブラリを使っても簡単に計算出来ますが、その意味が良く分かっていなかったのでメモします。

まず、点(1,1)に適当に作った行列Aをかけてみます。 $$ A= \left( \begin{array}{ccc} 1 & -4 \\ 3 & 2 \\ \end{array} \right) $$ 計算結果は(-3,5)となります。これは、点(1,1)に行列Aをかけたことで、点(1,1)が点(-3,5)に移動したと考えることが出来ます。
f:id:ni4muraano:20170125110329j:plain
更に、移動の仕方を細かく見ると、"回転"と"長さの変化"に分けることが出来ます。
f:id:ni4muraano:20170125105711j:plain
ここで行列Aは適当に作った行列なので、一般的には点に行列をかけると"回転する"+"長さが変わる"という変化が起こるんだろう、と想像することが出来ます。

次に、点(1,1)に適当ではなく意図的に作成した別の行列Rをかけてみます。 $$ R= \left( \begin{array}{ccc} 0 & -1 \\ 1 & 0 \\ \end{array} \right) $$ 計算結果は(-1,1)となります。先と同様に点が移動していますが、先の例と異なり、回転はしていますが長さは変わっていません。
f:id:ni4muraano:20170125114052j:plain
今の例で利用した行列Rはいわゆる回転行列(回転行列 - Wikipedia)で、回転のみの作用を持ちます。

固有値固有ベクトルについて

ここまでで
1. 点に行列をかけると"回転する"、"長さが変わる"という変化が起こる
2. 特殊なケースでは長さが変わらずに回転のみの変化が起こる
ということが分かりました。そうすると、次は「回転することなく、長さだけが変わるようなケースもあるのでは?」と想像できます。試しに全ての要素が1の行列と点(1,1)をかけると以下のようになります。 $$ \left( \begin{array}{ccc} 1 & 1 \\ 1 & 1 \\ \end{array} \right) \left( \begin{array}{ccc} 1 \\ 1 \\ \end{array} \right) = \left( \begin{array}{ccc} 2 \\ 2 \\ \end{array} \right) = 2 \left( \begin{array}{ccc} 1 \\ 1 \\ \end{array} \right) $$ 結果を図示するまでもなく、回転することなく長さが二倍になっていることが分かります。ようやく固有値固有ベクトルの話となりますが、教科書で見るA{\bf x}=\lambda {\bf x}というのは、「回転することなく、長さだけが変わるA{\bf x}の組み合わせが存在する可能性がありますよ。存在した場合、{\bf x}A固有ベクトルと呼びましょう。どれ位長さが変わるかを表す\lambda固有値と呼びましょう。」と言っている、というイメージを持てば良いかと思います。

固有値固有ベクトルの応用例

Aを対称行列とし、A固有値固有ベクトル(a_1,\lambda_1),(a_2,\lambda_2),…(a_n,\lambda_n)とした場合、Aを下記のように表現することができます。

A={\lambda_1}{a_1}{a_1^T}+{\lambda_2}{a_2}{a_2^T}+{...}+{\lambda_n}{a_n}{a_n^T}

仮に\lambda_1, \lambda_2と比較して{\lambda_3}{...}{\lambda_n}の値が小さければ、Aを以下のように近似することができます。

A{\fallingdotseq}{\lambda_1}{a_1}{a_1^T}+{\lambda_2}{a_2}{a_2^T}

例として、具体的に以下の対称行列Aで試します。 $$ A = \left( \begin{array}{ccc} 1 & 0.967 & 0.376 & 0.311 \\ 0.967 & 1 & 0.415 & 0.398 \\ 0.376 & 0.415 & 1 & 0.972 \\ 0.311 & 0.398 & 0.972 & 1 \end{array} \right) $$ A固有値固有ベクトルは以下の通りです。

\lambda_1=2.721, a_1=(0.487, 0.511, 0.508, 0.493)^T
\lambda_2=1.222, a_2=(0.527, 0.474, -0.481, -0.516)^T
\lambda_3=0.052, a_3=(-0.499, 0.539, -0.504, 0.455)^T
\lambda_4=0.005, a_4=(0.485, -0.474, -0.506, 0.533)^T

\lambda_1, \lambda_2と比較して\lambda_3, \lambda_4の値は小さいので、

A{\fallingdotseq}{\lambda_1}{a_1}{a_1^T}+{\lambda_2}{a_2}{a_2^T}

と近似できそうです。実際にこれを計算してみると、 $$ A = \left( \begin{array}{ccc} 0.985 & 0.982 & 0.363 & 0.321 \\ 0.982 & 0.985 & 0.428 & 0.387 \\ 0.363 & 0.428 & 0.985 & 0.985 \\ 0.321 & 0.387 & 0.985 & 0.987 \end{array} \right) $$ となります。元の行列と比較して各要素に似たような値が入っており、上手く近似できていることが分かります。

多変量解析法入門 (ライブラリ新数学大系)

多変量解析法入門 (ライブラリ新数学大系)