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

问题描述

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

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

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

我在理解K折简历的工作方式时遇到了麻烦。每次折叠都重新安装和改造洁牙机是最佳实践吗?我可以理解这是如何建立模型的,但是如果以后我想使用该模型,该怎么办。我应该保存哪个洁牙机?

我还想将其扩展到时间序列数据。我了解k倍在时间序列中的工作原理,但又如何将其与CV相结合?在这种情况下,我建议保存最后一个定标器,因为它适合于数据的4/5(在k = 5的情况下),并适合大多数(最新)数据。那是正确的方法吗?

解决方法

在每次折叠时重新安装和改造洁牙机是最佳实践吗?

是的。您可能需要阅读scikit-learn的doc on cross-validation

测试预测变量对从 培训,预处理(例如标准化,功能选择, 等),类似的数据转换也应从 训练集并应用于保留的数据以进行预测。

我应该保存哪个洁牙机?

保存定标器(以及任何其他预处理,即pipeline),并在所有训练数据上训练预测变量,而不仅仅是从(k-1)/ k交叉验证或一次拆分获得70%的验证。

  • 如果您要建立回归模型,就这么简单。

  • 如果模型训练需要使用以下参数进行超参数搜索 交叉验证(例如,通过网格搜索xgboost学习参数), 那么您已经从各个方面收集了信息,因此您 需要另一个测试集来估计真实的样本外模型 性能。 (一旦进行了估算,就可以重新培训 再次结合训练和测试数据。对于神经网络,并非总是要完成最后一步 针对特定样本量参数化的网络。)