【问题标题】:sklearn learning_curve and StandardScalersklearn learning_curve 和 StandardScaler
【发布时间】:2019-02-17 12:00:48
【问题描述】:

我想知道 sklearn.model_selection learning_curve 是否可以使用或确实使用 sklearn.preprocessing StandardScaler。我已经查看了实现,但我的技能水平达不到标准,无法自行得出结论。所有关于使用 learning_curve 的教程都将整个数据集传递给 learning_curve,learning_curve 会将数据分成训练集和测试集。

任何估算器的所有教程都让您将数据拆分为训练和测试,然后仅缩放训练数据并使用训练数据规模转换测试数据。哪个完全明白。

我是否应该在将整个数据集传递给 learn_curve 之前对其进行缩放。我知道 learning_curve 将使用 k-folds 或其他一些交叉验证方法,所以这是否重要,因为它会通过交叉验证得到平均?

谢谢,

【问题讨论】:

  • 你可能可以对它们进行管道化。
  • 老实说,我不知道!文档有说明吗?

标签: python scikit-learn


【解决方案1】:

learning_curve 不会自行实现StandardScaler。您可以创建一个Pipeline 作为您的估算器,其中第一步是StandardScaler,然后无论您使用什么估算器作为下一步。这样,当您在每次 cv 迭代期间调用 learning_curve 时,您将在训练折叠上训练缩放器和估计器,并且在每次迭代中针对测试折叠验证性能。

在调用 learning_curve 之前,您不希望缩放整个数据集。原因是当您在训练模型之前对整个集合进行缩放时,您会引入偏差,因为您使用将用于验证的数据来训练模型,这可能会导致过度拟合。

【讨论】:

  • 感谢您提供这个有用的 QA。当我打电话给pipe = Pipeline([ ('sc', StandardScaler()), ('model', model(**parameters, random_state=42)) ]) 然后我打电话给learning_curve(pipe, X_train, y_train, cv=RepeatedStratifiedKFold(n_splits=nb_splits, n_repeats=nb_repeats, random_state=42), scoring='accuracy') 时,这是否也仅将标准化应用于训练并将转换应用于cv loop 内的验证(即避免数据泄漏)?
猜你喜欢
  • 2022-01-12
  • 2018-03-15
  • 2020-07-16
  • 2016-08-25
  • 2021-05-11
  • 2018-08-21
  • 2021-12-18
  • 2020-04-23
  • 2018-08-23
相关资源
最近更新 更多