在我的数据上应用SVM之前,我想通过PCA来降低其维度。我应该先将训练数据
和测试数据
分开,然后分别对它们应用PCA,还是将两组数据合并后应用PCA然后再分开呢?
回答:
实际上,提供的两个答案都只是部分正确。这里的关键部分是你到底试图解决什么问题。可以考虑两种基本的可能设置,两者在某些假设下都是有效的。
情况1
你有一些数据(你已经将其分为训练和测试数据),并且未来你将获得更多来自相同分布的数据。
如果是这种情况,你应该在训练数据上拟合PCA,然后在其投影上拟合SVM,测试时只需应用已经拟合的PCA,然后应用已经拟合的SVM,对于将来的新数据也做同样处理。这样你的测试误差(在某些“大小假设”下)应该能近似你的预期误差。
情况2
你有一些数据(你已经将其分为训练和测试数据),并且未来你将获得一大块未标记的数据,然后你将能够拟合你的模型。
在这种情况下,你应该在提供的所有数据上拟合PCA,在标记部分(训练集)上学习SVM,并在测试集上进行评估。这样,一旦新数据到达,你可以使用你的数据和新数据一起拟合PCA,然后在你的旧数据上训练SVM(因为这是唯一有标签的数据)。在假设数据再次来自相同分布的情况下,这里一切都是正确的。你使用更多数据来拟合PCA,只是为了获得更好的估计器(也许你的数据维度非常高,PCA在小样本下失败了?)。