根据我的理解,cross_val_score, cross_val_predict, and cross_val_validate
可以使用K-fold validation
。这意味着训练集被部分迭代地用作训练集和测试集。但是,我还没有看到有关如何处理验证的任何信息。看来数据没有分为三组:训练集,验证集和测试集。 cross_val_score,cross_val_predict和cross_val_validate如何照顾培训,验证和测试?
答案 0 :(得分:1)
cross_val_score用于以比典型的火车测试拆分更可靠的方式估算模型的准确性。它执行相同的工作,但是重复多次。可以通过许多不同的方式来完成此“重复”操作:简历,重复的简历,LOO等。请参见transparent
如果需要交叉验证超参数,则应运行嵌套交叉验证,其中一个外部循环可估计模型的准确性,而一个内部循环可获取最佳参数。内部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
),以便调整模型超参数并获得最佳配置。
然后使用测试集评估模型。请注意,测试集应足够大并足以代表总体,以便获得对广义误差的无偏估计。