📝

基本的な数学をはじめから丁寧に_固有ベクトルと固有値、固有値分解

2024/04/22に公開

前書き

現在、AIエンジニアとして働いています。ライブラリを使えばやりたい分析は比較的なんでもできる時代ですが、基本的な数学への理解は大事だと思う派です。

学生時代は必至に勉強した数学も社会人になると後回しになり、覚えていないことが多いです。毎回調べるのも効率が悪いので、復習したことを復習したタイミングでまとめていこうと思います。

今回は何かと出てくる固有ベクトルと固有値です。

固有ベクトルと固有値の意味

行列\mathbf{A}に適当なベクトル\mathbf{x}をかけることを考えます。
数式で表すと

\mathbf{A}\mathbf{x}

です。

ベクトルは向きと大きさを意味します。
行列は係数をまとめたベクトルの関数です。

一般的に行列(係数のまとまり)にベクトル(向き)をかけ合わせると、結果の向きも変化します。

しかしごく稀に、
行列\mathbf{A}にベクトルをかけ合わせても結果の向きが変わらない組み合わせが存在します。

数式で表すと

\mathbf{A}\mathbf{x} = ??\mathbf{x}

こんな感じになります。

とても奇跡的なことです。
もちろん、行列(係数のまとまり)の分だけ大きさは変わります。変化した大きさの部分(上の式で??で表した部分)を格好つけて\lambdaと表記してみます。

すると、

\mathbf{A}\mathbf{x} = \lambda\mathbf{x}

という式が出来上がります。(美しい!!)


話がそれますが

\lambda\mathbf{x} = \mathbf{A}\mathbf{x}

と表記した方が意味を理解しやすい気がするのですが、私だけでしょうか。
(何か知っている方いらしゃればコメントお願い致します。)


話を戻します。

先ほども書きましたが、

\mathbf{A}\mathbf{x} = \lambda\mathbf{x}

この美しい式は一般的には成り立ちません。つまり特殊なケースです。特殊なケースなので、(この美しい式が成り立ったことを讃える意味も込めて)名前をつけてあげることにします。

ベクトル\mathbf{x}を行列\mathbf{A}固有ベクトル、固有ベクトルの係数\lambda固有値と名前をつけてあげます。


少し注意点です。
ベクトル\mathbf{x}の要素が全て0の場合(ベクトル\mathbf{x}が0ベクトルの場合)、どんな行列に対しても成り立ってしまいます。

少しずるいですよね。
ということで、0ベクトルは固有ベクトルとは見做しません。0ベクトルさんは例外です。

固有ベクトルと固有値の意味_要点まとめ

-固有ベクトル
行列\mathbf{A}に掛けても\lambda倍されるだけ(大きさが変わるだけ)で向きが変わらないベクトル
※一般的なベクトルの場合、行列Aをかけたら、ベクトルの向きも大きさも変わる。

-固有値
固有ベクトルを掛けた時に変化する大きさ

行列の固有値、固有ベクトルの求め方

それでは、この特殊なベクトルと値を求める方法を見ていきましょう!
この特殊なベクトル\mathbf{x}を求めるには、方程式を\mathbf{x} = ??の形にすれば良さそうです。

まず定義から

\mathbf{A}\mathbf{x} = \lambda\mathbf{x}

右辺を左辺に移行します。

\mathbf{A}\mathbf{x} - \lambda\mathbf{x} = \boldsymbol{0}

\boldsymbol{0}は全ての要素が0のベクトル(0ベクトル)です。

左辺をベクトル\mathbf{x}でくくることを考えます。
このままでは\mathbf{A}は行列、\lambdaは値で大きさが合わないため、行列\mathbf{A}と同じ大きさの単位行列\mathbf{E}(対角成分の要素が1でそれ以外の要素が0の行列)を値\lambdaにかけます。

\mathbf{A}\mathbf{x} - \lambda\mathbf{E}\mathbf{x} = \boldsymbol{0}

左辺をベクトル\mathbf{x}でくくります。

\lparen\mathbf{A} - \lambda\mathbf{E}\rparen\mathbf{x} = \boldsymbol{0}

ベクトル\mathbf{x}でくくりだすことに成功しました!
あと少しで念願の\mathbf{x} = ??の形にできます。

この特殊なベクトル\mathbf{x}が分かるまであと少しです!


この時、もし行列\lparen\mathbf{A} - \lambda\mathbf{E}\rparenに逆行列\lparen\mathbf{A} - \lambda\mathbf{E}\rparen^{-1}があると

\lparen\mathbf{A} - \lambda\mathbf{E}\rparen^{-1}\lparen\mathbf{A} - \lambda\mathbf{E}\rparen\mathbf{x} = \boldsymbol{0}
\mathbf{x} = \boldsymbol{0}

という結果が出てきます。

上の式展開??となった方は次のブロックを見てください。
余裕だった方は次のブロックは飛ばしてください。


ゆっくり見ていきましょう!

行列\lparen\mathbf{A} - \lambda\mathbf{E}\rparenに逆行列\lparen\mathbf{A} - \lambda\mathbf{E}\rparen^{-1}があると仮定して

\lparen\mathbf{A} - \lambda\mathbf{E}\rparen\mathbf{x} = \boldsymbol{0}

の両辺に左から(行列の計算では左からかけるのと、右からかけるので結果が変わるんでしたね!)\lparen\mathbf{A} - \lambda\mathbf{E}\rparen^{-1}をかけていきます。

\lparen\mathbf{A} - \lambda\mathbf{E}\rparen^{-1}\lparen\mathbf{A} - \lambda\mathbf{E}\rparen\mathbf{x} = \lparen\mathbf{A} - \lambda\mathbf{E}\rparen^{-1}\boldsymbol{0}

行列と逆行列の積は単位行列(左辺)、行列と0ベクトルの積は0ベクトル(右辺)であることを思い出すと

\mathbf{E}\mathbf{x} = \boldsymbol{0}

単位行列とベクトルの積は元のベクトルなので

\mathbf{x} = \boldsymbol{0}

という結果が出てきます。


ここまでの式展開を少しまとめます。

行列\lparen\mathbf{A} - \lambda\mathbf{E}\rparenに逆行列が有る場合
\mathbf{A}\mathbf{x} = \lambda\mathbf{x}を満たすベクトル\mathbf{x}は0ベクトルだと分かります。

つまり...どういうことだってばよ?

(0ベクトルは固有ベクトルと見做さないため、)
つまり行列\mathbf{A}は固有ベクトルをもたないことが分かります。

残念なニュースです。
行列\lparen\mathbf{A} - \lambda\mathbf{E}\rparenに逆行列が有る場合、行列\mathbf{A}は固有ベクトルをもたないことが分かってしまいました。

ぎゃ・・・逆行列さえ・・・
・・・逆行列さえなければ・・・!!!
固有ベクトルをもつことができるかもしれないのに・・・


良いニュースです。
実は行列が逆行列をもたない条件というものが存在します。
それは行列式が0であることです。
(逆行列の求め方を振り返ると分かりますが、行列式が0の場合0除算が発生し逆行列は求められません。)

とにかく行列式が0の場合、逆行列が存在しません

つまり、行列\lparen\mathbf{A} - \lambda\mathbf{E}\rparenに逆行列がない条件とは

\lvert\mathbf{A} - \lambda\mathbf{E}\rvert = 0

になります。(み、見たことある!)

この方程式を固有方程式と言います。


この固有方程式を\lambdaについて解くと、\lambdaは行列\mathbf{A}のランクの数だけ出てきます。

求まった\lambda

\lparen\mathbf{A} - \lambda\mathbf{E}\rparen\mathbf{x} = \boldsymbol{0}

に代入し、ベクトル\mathbf{x}について解くとそれぞれの固有値に応じた固有ベクトルが求まります!
意外と簡単です。

行列の固有値、固有ベクトルの求め方_要点まとめ

行列\mathbf{A}が固有ベクトルをもつためには、

\lvert\mathbf{A} - \lambda\mathbf{E}\rvert = 0

を満たす必要がある。

この式を\lambdaについて解き、求まった\lambda

\lparen\mathbf{A} - \lambda\mathbf{E}\rparen\mathbf{x} = \boldsymbol{0}

に代入しベクトル\mathbf{x}について解くことで、行列\mathbf{A}のそれぞれの固有値に応じた固有ベクトルを求めることができる。

固有値、固有ベクトルは行列\mathbf{A}のランクの数だけ出てくる。

行列が固有ベクトルと固有値をもつ条件

何度も書いていますが、固有ベクトルはとても特殊なベクトルです。
全ての行列に固有ベクトルがあるわけではありません。

固有ベクトルがない行列もたくさんあります。
と言うより、固有ベクトルがある行列も特殊です。

そもそもの話ですが、行と列の数が同じ数でなければなりません。
行と列が同じ数の行列のことを正方行列と言います。

勉強ばかりしていると忘れてしまいがちですが、行列の行と列の数が同じ数であることは当たり前ではありません。非常に有難いことです(^^)

そして、求め方の部分にも出てきましたが

\lvert\mathbf{A} - \lambda\mathbf{E}\rvert = 0

を満たす必要があります。

どんな行列にも固有ベクトルと固有値があると思うなよ!
ということが伝わればOKです(^^)

固有値分解

ここまでの流れで固有ベクトルと固有値の特殊さが分かって頂けていたら嬉しい限りです。

今まで1つ1つの固有ベクトルと固有値を個別に見てきました。
ここからは複数の固有ベクトルと固有値をまとめて考えてみることにします。
(線形代数の力をフル活用し、固有ベクトル・固有値の潜在能力を解放します!)


まず、行列\mathbf{A}の固有値\lambda達を対角成分にまとめてみます。
固有値たちを対角成分にまとめた行列を\Lambdaとします。

次にそれぞれの固有値に応じた固有ベクトルをまとめて行列を\mathbf{V}とします。
(ここからは1つ1つの固有ベクトルも\mathbf{v}と表記していきます。)

固有値をまとめた行列\Lambdaと固有ベクトルをまとめた行列\mathbf{V}を使うと固有ベクトル・固有値の定義より、

\mathbf{A}\mathbf{V} = \mathbf{V}\Lambda

と表せます。

右辺の\lambdaと固有ベクトル\mathbf{v}の順番が入れ替わっている気がします。
間違っているわけではありません。
実は固有値を対角成分にまとめた関係で、入れ替えないと定義式を満たさなくなるんです(^^;

両辺、右から\mathbf{V^{-1}}をかけると

\mathbf{A} = \mathbf{V}\Lambda\mathbf{V^{-1}}

元の行列\mathbf{A}は、固有ベクトルをまとめた行列\mathbf{V}と固有値をまとめた行列\Lambdaの組み合わせで表現できています。(こ、固有ベクトルと固有値スゲー)

実はこの作業のことを、行列\mathbf{A}固有値分解と言います。


少し脱線させてください。

\mathbf{A}\mathbf{V} = \mathbf{V}\Lambda

の両辺に左から\mathbf{V^{-1}}をかけると

\mathbf{V^{-1}}\mathbf{A}\mathbf{V} = \Lambda

両辺を入れ替えると

\Lambda = \mathbf{V^{-1}}\mathbf{A}\mathbf{V}

元の行列\mathbf{A}を、逆行列がある行列(正則行列)\mathbf{V}を使い、対角成分にのみ値がある行列(対角行列)に変換しています。

数学の世界ではこの作業を対角化と言います。

固有値分解は本質的に対角化と同じことをしていることが分かると思います。

固有値分解_要点まとめ

正方行列\mathbf{A}が固有値\lambda、固有ベクトル\mathbf{v}を持つ場合、
対角成分に固有値\lambdaを持つ行列を\Lambda、それぞれの固有ベクトルを行列としてまとめた行列を\mathbf{V}とすると

\mathbf{A} = \mathbf{V} \Lambda \mathbf{V^{-1}}

と変形することを行列\mathbf{A}固有値分解という。

実対称行列と固有ベクトル・固有値の性質

実は行列\mathbf{A}が実対称行列(要素が全て実数で転置しても元の行列と一致する行列)の場合、
固有ベクトルと固有値は実数になります。
更に実対称行列の固有ベクトルは直交します(ベクトル同士が垂直に交わる)。

直交行列の逆行列は転置行列と等しくなるので転置するだけで良くなります。
あの面倒臭い逆行列を計算しなくて良くなります(^^)

数式で表すと

\mathbf{V^{T}} = \mathbf{V^{-1}}

です。

固有値分解の式に当てはめると、

\mathbf{A} = \mathbf{V} \Lambda \mathbf{V^{T}}

となります。

逆行列の計算をしなくて良いのは本当に有難いです(^^)

主成分分析と固有ベクトル・固有値の関係

次元を削減する手法として主成分分析という手法が存在します。

固有値分解の素晴らしさ、私は主成分分析を学んで初めて知りました。
(線形代数学んでいる時は何がすごいのか全然わかりませんでした(^^))

主成分分析では行列\mathbf{A}に分散共分散行列を使用しています。
分散共分散行列は実対称行列なので、実は嬉しいことづくしの行列なのです。

主成分分析では固有値が大きい順に軸を選択することで、全体の情報量をなるべく落とさずにを次元を削減することができます。

後日、主成分分析についても詳しく書いていこうと思います。
こちらにまとめました。
前半の考え方の部分で直感的にどんなことをやりたいのかという点をまとめてあります。
(後半は数式の展開なので、じっくり理解したい方以外は読み飛ばしてください。)

https://zenn.dev/goals_techblog/articles/1b031d8b144ec5

後書き

数学、とても勉強になりました。
実に面白い!

参考にさせてもらった文献たちには感謝です(^^)

参考

行列
https://www.headboost.jp/what-is-matrix/
固有ベクトルと固有値
https://atarimae.biz/archives/24166
固有値と固有ベクトル
https://dora.bk.tsukuba.ac.jp/~takeuchi/?線形代数I%2F固有値と固有ベクトル
固有値分解と特異値分解
https://qiita.com/MA-fn/items/8257deb5441c18952f6d
対称行列の固有値分解
https://ymurasawa.web.fc2.com/ue-sl10.pdf
行列の対角化の意味と具体的な計算方法
https://manabitimes.jp/math/1133
対称行列の固有値と固有ベクトルの性質の証明
https://manabitimes.jp/math/1096

Goals Tech Blog

Discussion