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

在我的数据上应用SVM之前,我想通过PCA来降低其维度。我应该先将训练数据测试数据分开,然后分别对它们应用PCA,还是将两组数据合并后应用PCA然后再分开呢?


回答:

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

情况1

你有一些数据(你已经将其分为训练和测试数据),并且未来你将获得更多来自相同分布的数据

如果是这种情况,你应该在训练数据上拟合PCA,然后在其投影上拟合SVM,测试时只需应用已经拟合的PCA,然后应用已经拟合的SVM,对于将来的新数据也做同样处理。这样你的测试误差(在某些“大小假设”下)应该能近似你的预期误差。

情况2

你有一些数据(你已经将其分为训练和测试数据),并且未来你将获得一大块未标记的数据,然后你将能够拟合你的模型

在这种情况下,你应该在提供的所有数据上拟合PCA,在标记部分(训练集)上学习SVM,并在测试集上进行评估。这样,一旦新数据到达,你可以使用你的数据和新数据一起拟合PCA,然后在你的旧数据上训练SVM(因为这是唯一有标签的数据)。在假设数据再次来自相同分布的情况下,这里一切都是正确的。你使用更多数据来拟合PCA,只是为了获得更好的估计器(也许你的数据维度非常高,PCA在小样本下失败了?)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注