- 点集合の座標が行列Xとして与えられているとき、そのペアワイズ内積行列は対称行列であり、それを固有値分解し
- 回転行列Vと非負固有値を対角成分とする対角行列とを使って
- と分解できる
- これは、点をVで回転して となるようななる、新しい座標を点に与え、その配置が、分散の観点で整然とした状態になるようにすること、と説明される。
- 一方、単純無向グラフには、ラプラシアン行列Lなるものがさだまる
- Lはその対角成分がグラフ頂点の次数であるような行列Dと、グラフの隣接行列Aとを使ってとして与えられる
- Lも対称行列であり、固有値分解すると、回転行列と固有値を対角成分とする対角行列の積に分解できて、行列Xの場合と同様に、グラフの各頂点に座標を持たせたとみなすことができる
- いわゆるPCAでは、大きな固有値に対する固有ベクトルが与える座標軸は、点の存在状態をおおまかにとらえる力が大きい
- 他方、グラフラプラシアンの場合には、小さな固有値に対する固有ベクトルが与える座標軸が、グラフをおおまかに分ける力が大きい
- ちなみに、連結グラフのラプラシアンの固有値の1つは0で、それ以外はすべて正であることが知られている
- PCAの固有値の働きとグラフラプラシアンの固有値の働きが、大小に関して逆転していることを解消することにする。それによりグラフにとっても何かしらの対称行列があり、その固有値分解が、頂点に座標のようなものを与え、値の大きい固有値に対応する軸がそのグラフ頂点のばらつきを大まかに説明するような、そんな構成にしたい
- グラフラプラシアンを離れて、正定値対称正方行列 Q を考える
- Qには逆行列が存在するとして、それをとする
- 今、Qを固有値分解すると、となるとする。ここでVは回転行列であり、は対角行列ですべての対角成分が正である
- Vは回転行列であるからである
- 実は、となる。ただし、Vは回転行列でQを固有値分解したものと同じであり、は対角行列であり、その値はすべて正で、かつ、の大きい順にi番目の固有値と、の小さい順にi番目の固有値との積は、i=1,2,....のすべてのiについて1になる
library(GPArotation)
n <- 5
V <- Random.Start(n)
Sigma <- diag(runif(n)*5)
Q <- V %*% Sigma %*% t(V)
Qinv <- solve(Q)
eout.Q <- eigen(Q)
eout.Qinv <- eigen(Qinv)
eout.Q[[1]] * eout.Qinv[[1]][n:1]
(eout.Q[[2]] - eout.Qinv[[2]][,n:1]) * (eout.Q[[2]] + eout.Qinv[[2]][,n:1])
library(igraph)
n <- 7
A <- matrix(sample(0:1,n^2,replace=TRUE,prob=c(0.7,0.3)),n,n)
A <- A + t(A)
diag(A) <- 0
A <- sign(A)
g <- graph.adjacency(A,mode="undirected")
plot(g)
L <- diag(degree(g)) - A
eout <- eigen(L)
eout[[2]] %*% diag(eout[[1]]) %*% t(eout[[2]]) - L
Linv. <- (eout[[2]]) %*% diag(c(1/eout[[1]][1:(n-1)],10^8)) %*% t(eout[[2]])
einvout <- eigen(Linv.)
eout[[1]] * einvout[[1]][n:1]
eout[[2]] - einvout[[2]][,n:1]
eout[[2]] + einvout[[2]][,n:1]
(eout[[2]] - einvout[[2]][,n:1]) * (eout[[2]] + einvout[[2]][,n:1])