训练和测试数据集上的 PCA:我应该在训练+测试上运行一个 PCA,还是在训练和测试上分别运行两个?

机器算法验证 机器学习 分类 主成分分析 支持向量机 图像处理
2022-04-05 17:58:26

我正在做一个图像分类任务,每个示例图像的特征数量非常大(3,072:每个图像中的 # 个像素)。我正在考虑使用 PCA 将每个图像的 # 特征减少到n(说n=100),然后使用 SVM 使用缩减的特征空间进行学习和分类。我想知道我应该遵循这两条路径中的哪一条?

  1. 训练集上的 PCA并使用 SVM 学习新的尺寸减小。对于预测,PCA 再次在测试集上小号并使用学习到的 SVM 参数进行分类。

  2. 两者都有 PCA小号同时。也就是合并+小号成一个大矩阵并对它们执行PCA。然后将降维矩阵拆分为小号再次。学习 SVM 上的约简然后使用学习到的 SVM 来预测减少的小号.

2个回答

(1) 是不正确的,因为如果你分别在这两个集合上运行 PCA,你最终会得到两个不同的空间。您不能在一个空间中训练分类器,然后将其应用于不同的空间。

(2) 作弊。训练分类器时,不能使用测试集中的任何信息。

正确的方法是在训练集上运行 PCA,保存您使用的主成分,然后使用它们来转换测试集中的点。这样,两个集合中的点最终都在同一个空间中,并且您在训练期间没有使用任何有关您的测试集的知识。

或者,您可以使用完全独立的数据集,仅用于计算主成分。然后将您的训练集和测试集投影到它们定义的空间中。

在这个问题的背景下,(2) 更有意义,因为否则你甚至可能没有你试图分类的相同特征(即减少的维度可能意味着非常不同的东西)。有关更详细的讨论,请参见此处https://stackoverflow.com/questions/10818718/principal-component-analysis