将标准化/规范化与K-Fold交叉验证结合使用的正确方法是什么



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

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

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

我很难理解这是如何适用于K-fold CV的。在每个折叠上重新调整和转换缩放器是最佳做法吗?我可以理解这是如何构建模型的,但如果我以后想使用这个模型怎么办。我应该保存哪个缩放器?

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

在每个折叠上重新调整和转换缩放器是最佳实践吗

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

正如在从训练、预处理(如标准化、特征选择等(,等等(,类似的数据转换同样应该从中学习训练集,并应用于保持的数据以进行预测。

我应该保存哪个缩放器

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

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

  • 如果您的模型训练需要使用超参数搜索交叉验证(例如对xgboost学习参数的网格搜索(,那么你已经从不同的褶皱中收集了信息,所以你需要另一个测试集来估计真实的样本外模型表演(一旦你做出了这个估计,你就可以重新培训再次基于组合列车+测试数据。这最后一步并不总是针对神经针对特定样本大小参数化的网络。(

最新更新