【发布时间】:2021-01-30 02:36:35
【问题描述】:
我一直都知道,标准化或归一化应该只适合训练集,然后用于变换测试集。所以我要做的是:
scaler = StandardScaler()
scaler.fit_transform(X_train)
scaler.transform(X_test)
现在,如果我要在新数据上使用这个模型,我可以保存“缩放器”并将其加载到任何新脚本中。
虽然我无法理解这对 K-fold CV 是如何工作的。在每次折叠时重新安装和转换缩放器是最佳实践吗?我可以理解这在构建模型时是如何工作的,但是如果我以后想使用这个模型怎么办。我应该保存哪个缩放器?
此外,我想将此扩展到时间序列数据。我了解 k-fold 如何用于时间序列,但我又如何将它与 CV 结合起来?在这种情况下,我建议保存最后一个缩放器,因为这将适合数据的 4/5(如果 k=5),使其适合最新(最近)的数据。这会是正确的方法吗?
【问题讨论】:
-
理论上是的,您应该重新训练缩放器 k 次以进行验证。在实践中,我发现只要您在每个折叠中的样本很大,这并不重要。如果您想稍后使用该模型,则应根据所有可用的训练数据对模型和缩放器进行训练。
-
感谢您的回答。不过我还有一个问题。你在最后一句话中所说的:'你应该让模型和缩放器在所有可用的训练数据上训练'。但是,当为每个折叠重新拟合缩放器时,我基本上创建了 5 个不同的缩放器,它们都没有适合所有数据,对吧?所以我最终不会得到一个适合所有训练数据的缩放器。
-
使用交叉验证来估计模型的样本外性能,但是当您想使用模型进行样本外预测时,最好使用在所有可用数据上训练它,而不仅仅是 (k-1)/k 个数据,并用你的缩放器做同样的事情
-
因此,如果我理解正确,我将首先使用 K-fold(假设 K=5)CV,带有 5 个不同的缩放器实例(每个都适合 4/5,然后转换剩余的1/5th),以评估模型性能。然后,一旦我满意,我将在整个集合上构建模型,它已经被缩放器一次 fit_transformed? (对不起,如果这些是新手问题,我对这个 lol 有点陌生)
-
是的,没错
标签: python normalization cross-validation k-fold standardization