汎化誤差を測定するには、後者を実行する必要があります。すべてのトレーニングセットに対して個別のPCA(つまり、すべての分類子およびすべてのCVフォールドに対して個別のPCAを実行することを意味します)。
次に、同じ変換をテストセットに適用します。つまり、テストセットで個別のPCA を実行しないでください。ここで説明するように、トレーニングセットの平均(および必要に応じて標準偏差で除算)を減算します。トレーニングセットのPCAの後にテストセットをゼロ中心にします。次に、トレーニングセットのPCにデータを投影します。
使用するPCの数に対して自動基準を定義する必要があります。
「実際の」分類の前の最初のデータ削減ステップにすぎないため、少数のPCを使用してもパフォーマンスは低下しません。経験から何台のPCが良いかと予想される場合は、それを使用することができます。
また、すべての代理モデルに対してPCAをやり直す必要があるかどうかを後でテストすることもできます(1つのPCAモデルのみで分析を繰り返す)。このテストの結果は報告する価値があると思います。
PCAを繰り返さないというバイアスを一度測定したところ、分光分類データを使用すると、すべてのサロゲートモデルに対してPCAを再実行しない場合、一般化エラー率の半分しか検出されませんでした。
ただし、記述(視覚化など)の目的で、データセット全体の追加の PCAモデルを構築できます。必ず、2つのアプローチを互いに分離してください。
データセット全体の最初のPCAがクラスラベルを表示せずに結果にどのようにバイアスをかけるのか、という感覚をつかむのはまだ難しいと感じています。
ただし、データは表示されます。また、クラス間分散がクラス内分散と比較して大きい場合、クラス間分散はPCA投影に影響します。通常、分類を安定させる必要があるため、PCAステップが実行されます。つまり、追加のケースがモデルに影響を与える状況です。
クラス間の分散が小さい場合、このバイアスはそれほど大きくありませんが、その場合、PCAは分類に役立ちません。PCAプロジェクションは、クラス間の分離を強調することはできません。
caret
パッケージを使用したRのPCAとの相互検証を行う方法については、この質問を参照してください:CaretでのPCAとk-fold相互検証。