我有从一个小数据集中提取的特征,想通过使用 LDA 来减少维度。还想用 k 折交叉验证做一个 SVM 分类。
我的问题是:最佳实践是什么:在 CV 之前做 LDA,还是在 CV 内做 LDA(即每个训练和测试折叠)?
我有从一个小数据集中提取的特征,想通过使用 LDA 来减少维度。还想用 k 折交叉验证做一个 SVM 分类。
我的问题是:最佳实践是什么:在 CV 之前做 LDA,还是在 CV 内做 LDA(即每个训练和测试折叠)?
这取决于您想要达到的目标。
如果您想可视化SVM 分类的结果,那么您应该在之后进行。
如果你想减少噪音,加快训练速度……或者任何你想减少问题维度的原因。你应该先这样做。
这里的一个有用的想法是在管道内执行 LDA 并在 CV 中选择最佳超参数。
在此示例中,您可以检查 PCA,然后检查逻辑回归。您的情况将与 LDA 和 SVM 类似。
我的回答是在交叉验证的每一折中都执行 LDA。
原因如下。交叉验证被用作评估模型性能的一种方式。这个估计基本上试图回答以下问题:
在对任意数据集进行训练时,我的模型将如何执行
如果您不使用交叉验证,您总是会冒很小的风险,即模型特别适合该特定训练集。也许,如果你的训练数据发生变化,你的模型也不会学习。
这就是为什么您要在每个折叠上运行 LDA。如果你不这样做,你就会冒这样的风险,即一旦你的训练数据发生变化,LDA 对你的 SVM 的影响可能会变成负面的。
当然,一旦你运行了交叉验证并找到了最佳的超参数设置,你应该在所有数据上训练你的模型一次。
有时不需要 k 折来带来比标准 LDA 更好的结果。它更适合大型数据集。