2

我一直了解到标准化或归一化应该只适用于训练集,然后用于转换测试集。所以我要做的是:

scaler = StandardScaler()
scaler.fit_transform(X_train)
scaler.transform(X_test)

现在,如果我要在新数据上使用这个模型,我可以保存“缩放器”并将其加载到任何新脚本中。

尽管理解这对 K-fold CV 是如何工作的,但我遇到了麻烦。在每次折叠时重新安装和转换缩放器是最佳实践吗?我可以理解这在构建模型时是如何工作的,但是如果我以后想使用这个模型怎么办。我应该保存哪个缩放器?

此外,我想将其扩展到时间序列数据。我了解 k-fold 如何用于时间序列,但我又如何将它与 CV 结合起来?在这种情况下,我建议保存最后一个缩放器,因为这将适合数据的 4/5(如果 k=5),使其适合最新(最近)的数据。那是正确的方法吗?

4

1 回答 1

1

在每次折叠时重新安装和转换缩放器是最佳实践吗?

是的。您可能想阅读 scikit-learn关于交叉验证的文档

正如在训练中保留的数据上测试预测器很重要一样,预处理(例如标准化、特征选择等)和类似的数据转换同样应该从训练集中学习并应用于保留的数据以进行预测.

我应该保存哪个缩放器?

保存缩放器(和任何其他预处理,即管道)和在所有训练数据上训练的预测器,而不仅仅是交叉验证的 (k-1)/k 或单个拆分的 70%。

  • 如果你正在做一个回归模型,那就这么简单。

  • 如果您的模型训练需要使用交叉验证进行超参数搜索(例如,对 xgboost 学习参数进行网格搜索),那么您已经从各个折叠中收集了信息,因此您需要另一个测试集来估计真实的样本外模型性能。(一旦你做出了这个估计,你可以在组合的训练+测试数据上再次重新训练。对于为特定样本大小参数化的神经网络,这最后一步并不总是完成。)

于 2020-10-16T10:32:01.167 回答