ichou1のブログ

主に音声認識、時々、データ分析のことを書く

固有値分解と座標変換

DNN(Deep Neural Network)を学んでいると、擬似逆行列の算出や低ランク近似などで固有値の概念に出くわす。
固有値分解に関するメモ。

以下のサイトを参考にさせていただいた。
http://eman-physics.net/math/linear09.html

変換に使う行列Aは参考サイトと同じもの使用。

一次変換を表す行列A

f:id:ichou1:20181004210807p:plain

Rでの表現。

     [,1] [,2]
[1,]    3    1
[2,]    2    4

行列Aを固有値分解する。

A.eigen <- eigen(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)

f:id:ichou1:20181004215537p:plain

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次変換によって移された座標を示す。
f:id:ichou1:20181004222348p:plain

固有値5に属する固有ベクトルは以下の関係を満たす。
f:id:ichou1:20181004221854p:plain

ここでは、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)のもの。目印として残した。
f:id:ichou1:20181005205241p:plain

拡大。
f:id:ichou1:20181005205249p:plain

座標軸の正負の向きが標準基底と同じになるよう、回転および反転。
f:id:ichou1:20181005210003p:plain

再掲
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)