ペアワイズLDの幾何配置

  • k次元空間にn個の単位ベクトルがある
  • ベクトル同士の内積が関係を表す
  • ペアワイズな内積\frac{n(n-1)}{2}個計算される
  • その内積から、k次元単位球面上にn個のベクトルを再配置する
library(sphere)
k<-5
n<-30
X<-RandomSphere(df=k,n=n)
X
#ペアワイズな内積の行列

Y<-X%*%t(X)
diag(Y)<-1
Y
# 角度にしてもよし
Z<-acos(Y)
Z

# このYを使って、ベクトルを再配置する

VectorsFromPairwise<-function(X,k){
	n<-length(X[,1])
	M<-matrix(0,n,n)
	M[1,1]<-1
	M[2,1]<-X[2,1]
	M[2,2]<-sqrt(1-M[2,1]^2)
	for(i in 3:n){
		M[i,1]<-X[i,1]
		for(j in 2:(i-1)){
			M[i,j]<-1/M[j,j]*(X[i,j]-sum(M[i,1:(j-1)]*M[j,1:(j-1)]))
		}
		M[i,i]<-sqrt(1-sum(M[i,]^2))
	}
	# 次元より大きい部分は不要なので削除
	M<-M[,1:k]
	M
}
M<-VectorsFromPairwise(Y,k)
M
# 再配置されたベクトルペアの内積は、もとの内積と等しい
Y2<-M%*%t(M)
max(abs(Y-Y2))
  • これを使ってこちらの配置を見直す
k<-5
t1<-acos(0.9)
t2<-acos(0.2)

Y<-SimplexAroundTip(k,t1,t2)
Y
A<-Y%*%t(Y)
A
MA<-VectorsFromPairwise(A,k+1)
MA
MA%*%t(MA)

Y2<-SimplexAtTip(k,t1)
Y2
B<-Y2%*%t(Y2)
B
MB<-VectorsFromPairwise(B,k+1)
MB
MB%*%t(MB)