在将数据发送到SVM之前应用PCA

时间:2016-08-28 21:19:55

标签: machine-learning

在对我的数据应用SVM之前,我想通过PCA减少其维度。我应该将 Train data Test data 分开,然后分别对它们分别应用PCA,还是在两个组合上应用PCA然后将它们分开?

3 个答案:

答案 0 :(得分:4)

实际上两个提供的答案都只是部分正确。这里的关键部分是您要解决的确切问题是什么。可以考虑两种基本的可能设置,并且两种设置在某些假设下都是有效的。

案例1

您有一些数据(您将其拆分为训练和测试),并且将来您将获得来自同一发行版的更多数据

如果是这种情况,您应该将PCA放在列车数据上,然后将SVM放在其投影上,并且为了进行测试,您只需应用已安装的PCA,然后安装已经安装的SVM,并且对于将要出现的新数据,您也会做同样的事情。这样你的测试错误(在某些"大小假设和#34;应该接近你预期的错误)。

案例2

您有一些数据(您将火车和测试分开),将来您将获得大量未标记数据,您将能够适合您的模型然后。 / em>的

在这种情况下,您在所提供的整个数据上安装PCA,在标记部分(列车组)上学习SVM并在测试集上进行评估。这样,一旦新数据到达,您可以使用您的数据和新数据来安装PCA,然后 - 在您的旧数据上训练SVM(因为这是唯一一个有标签的人)。假设再次 - 数据来自相同的分布,这里的一切都是正确的。你使用更多的数据来适应PCA只是为了得到一个更好的估算器(也许你的数据真的是高维度的,PCA会因为小样本而失败?)。

答案 1 :(得分:0)

你应该分开做。如果你在两个组合上运行pca,那么你将在你的svn中引入偏差。测试集的目标是在不事先了解数据的情况下查看算法的执行情况。

答案 2 :(得分:0)

在列车上学习PCA的投影矩阵,并使用它来减少测试数据的尺寸。

如果您将分类器应用于测试数据一次只有一个样本的实际运行时间,那么您就不必依赖于在测试集中收集足够的数据。

另外我认为单独的火车和测试PCA会失败。为什么?

将PCA视为为您提供功能,然后您将学习这些功能的分类器。如果您的数据随着时间的推移而变化,那么您使用PCA获得的测试功能会有所不同,并且您没有经过这些功能培训的分类器。即使PCA的一组方向/功能保持不变,但它们的顺序不同,您的分类器仍会失败。