これを視覚化する1つの方法は次のとおりです。
- データに対してPCAを実行します。
- してみましょうベクトル空間は、最初の2つの主成分ベクトルで張られること、および聞かせて補完します。V ⊤VV⊤
- データセットの各ベクトルを、要素と剰余項()の合計として分解します。これをます。(これは、PCAの結果を使用すると簡単です。) V V ⊤は、xはiは = V I + C IxiVV⊤xi=vi+ci
- 散布図を作成します 対。| | v i | |||ci||||vi||
データが本当に次元である場合、プロットは平らな線のように見えるはずです。≤2
Matlab(投げられているすべての靴からダッキング):
lat_d = 2; %the latent dimension of the generating process
vis_d = 16; %manifest dimension
n = 10000; %number of samples
x = randn(n,lat_d) * randn(lat_d,vis_d) + 0.1 * randn(n,vis_d); %add some noise
xmu = mean(x,1);
xc = bsxfun(@minus,x,xmu); %Matlab syntax for element recycling: ugly, weird.
[U,S,V] = svd(xc); %this will be slow;
prev = U(:,1:2) * S(1:2,1:2);
prec = U(:,3:end) * S(3:end,3:end);
normv = sqrt(sum(prev .^2,2));
normc = sqrt(sum(prec .^2,2));
scatter(normv,normc);
axis equal; %to illlustrate the differences in scaling, make axis 'square'
これにより、次の散布図が生成されます。
lat_d
4に変更すると、ラインの平坦性が低下します。