cross_val_score,cross_val_predict和cross_val_validate如何进行培训,测试和验证?

时间:2019-04-21 18:55:14

标签: python scikit-learn

根据我的理解,cross_val_score, cross_val_predict, and cross_val_validate可以使用K-fold validation。这意味着训练集被部分迭代地用作训练集和测试集。但是,我还没有看到有关如何处理验证的任何信息。看来数据没有分为三组:训练集,验证集和测试集。 cross_val_score,cross_val_predict和cross_val_validate如何照顾培训,验证和测试?

2 个答案:

答案 0 :(得分:1)

cross_val_score用于以比典型的火车测试拆分更可靠的方式估算模型的准确性。它执行相同的工作,但是重复多次。可以通过许多不同的方式来完成此“重复”操作:简历,重复的简历,LOO等。请参见transparent

中的3.1.2

如果需要交叉验证超参数,则应运行嵌套交叉验证,其中一个外部循环可估计模型的准确性,而一个内部循环可获取最佳参数。内部CV循环会将外部循环的训练集进一步分为训练集和验证集。该过程应类似于:

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允许将GridSearchCV嵌套在cross_val_score中。

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

答案 1 :(得分:0)

cross_val_score确实会进行验证,因为该过程将数据集分为K个部分(默认为3个部分),并执行了K次拟合和验证。 Sklearn documentation讨论了将数据集拆分为训练/测试集,但不要误解名称。该测试集实际上是一个验证集。

通过使用cross_val_score,您可以调整模型超参数并获得最佳配置。

因此,一般程序应该是(由您自己)将数据集分为训练集和测试集。

使用训练集进行交叉验证(调用cross_val_score),以便调整模型超参数并获得最佳配置。

然后使用测试集评估模型。请注意,测试集应足够大并足以代表总体,以便获得对广义误差的无偏估计。