固有値分解と座標変換
DNN(Deep Neural Network)を学んでいると、擬似逆行列の算出や低ランク近似などで固有値の概念に出くわす。
固有値分解に関するメモ。
以下のサイトを参考にさせていただいた。
http://eman-physics.net/math/linear09.html
変換に使う行列Aは参考サイトと同じもの使用。
固有値
D <- diag(A.eigen$values) [,1] [,2] [1,] 5 0 [2,] 0 2
固有ベクトル
# 固有値5に属する固有ベクトル(正規化)) U1 <- A.eigen$vectors[,1] [1] -0.4472136 -0.8944272 # 固有値2に属する固有ベクトル(正規化)) U2 <- A.eigen$vectors[,2] [1] -0.7071068 0.7071068
2つのベクトルの内積は非ゼロなので、
# 2つの固有ベクトルの内積 U1 %*% U2 [,1] [1,] -0.3162278
2つの固有ベクトル( -0.45, -0.89 )、 ( -0.71, 0.71 )は直交しない。
視覚化してみる。
適当な4つの点P1( 1, 2 )、P2( 1, 1 )、P3( 1, 0 )、P4( -1, -2 )を選ぶ。
P1 <- matrix(c(1, 2), nrow=2, ncol=1, byrow=FALSE) P2 <- matrix(c(1, 1), nrow=2, ncol=1, byrow=FALSE) P3 <- matrix(c(1, 0), nrow=2, ncol=1, byrow=FALSE) P4 <- matrix(c(-1, -2), nrow=2, ncol=1, byrow=FALSE)
1次変換によって移される座標を求める。
P1の1次変換
A %*% P1 [,1] [1,] 5 [2,] 10
(1, 2)から(5, 10)へ移った。
P2の1次変換
A %*% P2 [,1] [1,] 4 [2,] 6
(1, 1)から(4, 6)へ移った。
P3の1次変換
A %*% P3 [,1] [1,] 3 [2,] 2
(1, 0)から(3, 2)へ移った。
P4の1次変換
A %*% P4 [,1] [1,] -5 [2,] -10
(-1, -2)から(-5, -10)へ移った。
変換前と変換後の座標をプロットしてみる。
白抜きが元の座標、同じ形の黒塗りが1次変換によって移された座標を示す。
ここでは、P1とP4が該当。
P1に関しては(1, 2)だったものが(5, 10)に移っており、5倍(固有値と同じ)されている。
また、P4に関しては(-1, -2)だったものが(-5, -10)に移っており、同じく5倍(固有値と同じ)されている。
固有ベクトルを基底とする新しい座標軸で、各点がどう表現されるか確認。
固有ベクトルを列ベクトルとして表し、横に並べた行列
V <- A.eigen$vectors [,1] [,2] [1,] -0.4472136 -0.7071068 [2,] -0.8944272 0.7071068
この逆行列を、元の座標を表す列ベクトルの左から掛けることで、新しい基底での座標が求まる。
何故こんなことをするのかは、無相関化の項をご参照。
work-in-progress.hatenablog.com
P1の新座標表現
solve(V) %*% P1 [,1] [1,] -2.236068e+00 [2,] 2.220446e-16
小数点第二位を四捨五入すると(-2.24, 0)
P2の新座標表現
solve(V) %*% P2 [,1] [1,] -1.4907120 [2,] -0.4714045
小数点第二位を四捨五入すると(-1.49, -0.47)
P3の新座標表現
solve(V) %*% P3 [,1] [1,] -0.745356 [2,] -0.942809
小数点第二位を四捨五入すると(-0.75, -0.94)
P4の新座標表現
solve(V) %*% P4 [,1] [1,] 2.236068e+00 [2,] -2.220446e-16
小数点第二位を四捨五入すると(2.24, 0)
プロットしてみる。
元々の基底(1, 0)、(0, 1)は消して、新しい基底(-0.45, -0.89)、 (-0.71, 0.71)を描画。
枠外の目盛りは元々の基底(1, 0)、(0, 1)のもの。目印として残した。
拡大。
座標軸の正負の向きが標準基底と同じになるよう、回転および反転。
再掲
P1(-2.24, 0) <== 標準基底での表現(1, 2)
P2(-1.49, -0.47) <==標準基底での表現(1, 1)
P3(-0.75, -0.94) <==標準基底での表現(1, 0)
P4(2.24, 0) <==標準基底での表現(-1, -2)