• k\times k正方行列Mを適当に作るとき、k^2個の成分を指定できる
  • 自由度がk^2
  • 今、適当に作った正方行列のk本の列ベクトルが、線形独立になっているものとするとM=QRQR分解できる
  • Qは正規直交基底でありRは上三角行列である
  • Rという上三角行列は非0の成分の数が\frac{k(k+1)}{2}個あるから、自由度が\frac{k(k+1)}{2}
  • これをQで回転させたら、Mが出来上がるから、Qの作り方にはMを作るときの自由度とRの自由度の差であるk^2-\frac{k(k+1)}{2}=\frac{k(k-1)}{2}だけが残っていることになる
  • 回転行列の自由度が\frac{k(k-1)}{2}であることは、こんな風にも考えられる
    • 回転行列は、すべての列ベクトルのノルムが1(ここでk自由度を使っている)
    • 回転行列は、すべての列ベクトルペアのなす角が直交(ここで\frac{k(k-1)}{2}自由度をつかっている)
    • k^2-k-\frac{k(k-1)}{2}=\frac{k(k-1)}{2}が回転行列を自由に作るために残された自由度
  • このことは、こちらで、k本のk次元単位ベクトルの相対配置をするときに、k本のベクトルのペアワイズ角の情報があると、一意に相対配置が決まったことと同じこと。回転行列の場合の「すべてのペアワイズ角が直角」の部分が「ペアワイズ角の情報」に代わっただけ
  • 正方行列がQR分解されるっていうのはどういうことだろう
    • 正方行列を方向のRの対角成分と成分間の遠近関係成分(Rの非対角上三角成分)と、それを回転することで表している
    • 正方行列を固有値分解する(M=VSU)と、対角成分Sがとれるが、残りのV,Uは必ずしも「良い意味」がとれるとは限らない
    • 正方行列が対称(分散共分散行列のような)の場合には、固有値分解のV,Uは回転・逆回転
    • これは対称行列はk^2ではなくて\frac{k(k+1)}{2}=\frac{k(k-1)}{2}+kの自由度があるが、それは、回転の自由度と個々のベクトルの長短の情報である、という自由度の分解にできるから
  • RでQR分解をしてみよう
k<-3
m<-matrix(rnorm(k^2),k,k)
qr.m<-qr(m)
# QとRとはqr.mから作る
Q<-Q.qr(qr.m)
R<-R.qr(qr.m)
Q
# Rは上三角
R
# Qは正規直交基底であることの確認
Q%*%t(Q)
  • GPArotationパッケージでは、QR分解を用いて、ランダムな正規直交基底(回転行列)を作っている
library(GPArotation)
Random.Start(k)
> Random.Start
function (k) 
{
    qr.Q(qr(matrix(rnorm(k * k), k)))
}
<environment: namespace:GPArotation>