PCA を使用すると、返される各主成分は、元の列/ディメンションの線形結合になります。おそらく、例があなたの誤解を解くかもしれません。
150 個のインスタンスと 4 つの次元で構成される Fisher-Iris データセットを考えて、データに PCA を適用してみましょう。理解しやすくするために、PCA 関数を呼び出す前に、まずデータをゼロセンタリングします。
load fisheriris
X = bsxfun(@minus, meas, mean(meas)); %# so that mean(X) is the zero vector
[PC score latent] = princomp(X);
最初に返された主成分 (PC
行列の 1 列目)を見てみましょう。
>> PC(:,1)
0.36139
-0.084523
0.85667
0.35829
これは、元の次元の線形結合として表されます。つまり、次のようになります。
PC1 = 0.36139*dim1 + -0.084523*dim2 + 0.85667*dim3 + 0.35829*dim4
したがって、主成分によって形成される新しい座標系で同じデータを表現するには、新しい最初の次元は、上記の式による元の次元の線形結合でなければなりません。
X*PC
これは、PRINCOMP ( ) の 2 番目の出力で正確に返されるものとして簡単に計算できます。これscore
により、この試みを確認できます。
>> all(all( abs(X*PC - score) < 1e-10 ))
1
最後に、各主成分の重要性は、それが説明するデータの分散の程度によって決定できます。これは、PRINCOMP ( latent
) の 3 番目の出力によって返されます。
PRINCOMP を使用せずに、データの PCA を自分で計算できます。
[V E] = eig( cov(X) );
[E order] = sort(diag(E), 'descend');
V = V(:,order);
共分散行列の固有ベクトルはV
主成分 (PC
上記と同じですが、符号は逆にすることができます) であり、対応する固有値E
は説明される分散の量を表します ( と同じlatent
)。主成分を固有値でソートするのが通例であることに注意してください。前と同じように、新しい座標でデータを表現するには、単純に計算します (符号が一致することを確認した場合、上記X*V
と同じである必要があります)。score