MDS

  • サンプルの多次元データが与えられているときに、特異値分解や、分散共分散行列の固有値分解をする話しが昨日まで。
  • MDSっていうのもある。
    • こちらは、サンプルに関してペアワイズの距離が与えられているとき、サンプル間の内積行列を再構成してやって、それについて固有値分解して、多次元座標を与えようというもの
    • 距離から内積行列が再構成できるのは、余弦定理から。
    • 内積行列の定め方は、原点の取り方による
    • 原点の取り方の一つが中心化行列J_n=I_n-\frac{1}{n} 1_n; I_n,は単位行列1_nは成分がすべて1である行列を用いたもので、その場合、距離行列Dを用いて、内積行列はB_c=-\frac{1}{2}JnD^2Jnとなる
    • B_c=AS^2A^T固有値分解して、ASがその座標
  • RのMDS(classical MDS)の関数は、MASS library の"cmdscale()"
N<-4
M<-10
mat<-matrix(rnorm(N*M),nrow=N)
#距離行列
d<-dist(mat,diag=TRUE,upper=TRUE)
d<-as.matrix(d)

D2<-d^2
#中心化行列
jmat<-diag(rep(1,N))-1/N*rep(1,N)%*%t(rep(1,N))
#中心化内積行列
Bc<--1/2*jmat%*%D2%*%jmat
#固有値分解
bcEigen<-eigen(Bc)
#固有値分解の結果は、内積行列の要素になっている
bcEigen$vectors %*% diag(bcEigen$values) %*% t(bcEigen$vectors)
#固有値分解による座標の取り方
coords<-bcEigen$vectors %*%diag(sqrt(bcEigen$values))
#内積行列になっている
coords%*%t(coords)
Bc

plot(as.data.frame(coords))