【问题标题】:Do we only use trainig data whe using cross_val_score?我们在使用 cross_val_score 时是否只使用训练数据?
【发布时间】:2019-04-25 04:07:12
【问题描述】:

我们是向 cross_val_score 提供训练数据还是整个数据?使用 cross_val_score 时我很困惑。我知道我们将数据划分为训练和测试,并为我们的模型提供训练数据。

这是 sckit-learn 文档中的示例,使用了整个数据。

cross_val_score(model, iris.data, iris.target,scoring=scorer, cv=5)

【问题讨论】:

标签: python validation cross-validation


【解决方案1】:

您传递整个训练数据,sklearn 将根据 cv 参数对其进行拆分。

输出将来自每次迭代时自动创建的测试部分。

【讨论】:

  • 那么,在 cross_val_score 中,sklearn 会将我们的数据拆分为训练、验证和测试?
  • 训练和测试要准确,但是是的,基本上就是这样
  • 所以没有验证集?我认为我们使用 cross_val_score 来找到最佳的超参数。对不起,我用 sklearn 文档中的图片更新了问题。
  • 如果你用它来优化你的超参数,你可以留下一部分训练集,使用cross_val_score,直到你找到剩余数据的最优模型,然后测试你的具有您首先排除的数据部分的最佳模型。
【解决方案2】:

cross_val_score 用于以比仅使用典型的训练测试拆分更稳健的方式估计模型的准确性。您应该提供其中的所有数据,它将进行必要的训练测试拆分。

如果您需要对超参数进行交叉验证,那么您应该运行嵌套交叉验证,其中一个外部循环用于估计模型的准确性,一个内部循环用于获取最佳参数,这些参数将在 train 和验证集。程序应该是这样的:

Outer loop:
    Split train - test
    Inner loop:
       Fix parameters      
       Split train in train2 - validation
       Train with train2 set
       Score with validation set
       Repeat Inner loop for all parameters
   Train with train set and best parameters from inner loop
   Score with test
   Repeat outer loop until CV ends
   Return test scores

幸运的是,sklearn 允许在 cross_val_score 中嵌套一个 GridSearchCV。

validation = GridSearchCV(estimator, param_grid)
score = cross_val_score(validation, X, y)

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2022-11-17
    • 2016-09-10
    • 2014-02-21
    相关资源
    最近更新 更多