IID座標各10,000次元空間で20個のランダムな点を取る。それらを10個のペア(「カップル」)に分割し、各ペア(「子」)の平均をデータセットに追加します。次に、結果の30ポイントでPCAを実行し、PC1とPC2をプロットします。
注目すべきことが起こります。それぞれの「家族」は、すべてが互いに近接する3組の点を形成します。もちろん、すべての子供は元の10,000次元の空間ではそれぞれの親に近いので、PCA空間でも親に近いと期待できます。ただし、PCA空間では、親の各ペアは互いに近接しています。ただし、元の空間ではそれらは単なるランダムなポイントです。
PCAプロジェクションでは、子供はどうやって親をまとめるのですか?
これは、子供たちが親よりも規範が低いという事実に何らかの影響を受けていることを心配するかもしれません。これは問題ではないようです:(x + y )/ √として子供を生成する場合
この質問はおもちゃのデータセットを使用していますが、それは、私がゲノム全体の関連研究(GWAS)からの実世界のデータセットで観察した、ディメンションが単一ヌクレオチドの多型(SNP)であることに動機付けられています。このデータセットには、母・父・子のトリオが含まれていました。
コード
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)
def generate_families(n = 10, p = 10000, divide_by = 2):
X1 = np.random.randn(n,p) # mothers
X2 = np.random.randn(n,p) # fathers
X3 = (X1+X2)/divide_by # children
X = []
for i in range(X1.shape[0]):
X.extend((X1[i], X2[i], X3[i]))
X = np.array(X)
X = X - np.mean(X, axis=0)
U,s,V = np.linalg.svd(X, full_matrices=False)
X = U @ np.diag(s)
return X
n = 10
plt.figure(figsize=(4,4))
X = generate_families(n, divide_by = 2)
for i in range(n):
plt.scatter(X[i*3:(i+1)*3,0], X[i*3:(i+1)*3,1])
plt.tight_layout()
plt.savefig('families1.png')
plt.figure(figsize=(4,4))
X = generate_families(n, divide_by = np.sqrt(2))
for i in range(n):
plt.scatter(X[i*3:(i+1)*3,0], X[i*3:(i+1)*3,1])
plt.tight_layout()
plt.savefig('families2.png')