为了测量泛化误差,您需要做的是:对每个训练集使用单独的PCA(这意味着对每个分类器和每个CV折叠都进行单独的PCA)。
然后,将相同的变换应用于测试集:即,您不对测试集执行单独的PCA!您减去训练集的平均值(如果需要,除以标准偏差),如下所示:将PCA之后的测试集零集中在训练集上。然后,将数据投影到训练集的PC上。
您需要为要使用的PC数量定义一个自动标准。
由于这只是“实际”分类之前的第一个数据精简步骤,因此使用过多的PC可能不会损害性能。如果您从经验中期望有多少台PC可以使用,那么您可以使用它。
之后,您还可以测试是否有必要针对每个代理模型重做PCA(仅对一个PCA模型重复进行分析)。我认为该测试的结果值得报告。
我曾经测量过不重复PCA的偏见,发现在我的光谱分类数据中,当不为每个替代模型重做PCA时,我仅检测到一半的泛化错误率。
话虽如此,您可以为整个数据集构建一个附加的 PCA模型,以进行描述(例如,可视化)。只要确保将两种方法彼此分开即可。
我仍然很难感觉到整个数据集上的初始PCA将如何偏斜结果而没有看到类标签。
但是它确实看到了数据。并且如果类间方差与类内方差相比较大,则类间方差将影响PCA预测。通常,完成PCA步骤是因为您需要稳定分类。也就是说,在其他情况确实影响模型的情况下。
如果类之间的差异很小,那么这种偏差就不会太大,但在那种情况下,PCA也不会对分类有所帮助:PCA投影无法帮助强调类之间的分离。
caret
包:PCA和插入符k折交叉验证。