根据我的理解,cross_val_score, cross_val_predict, and cross_val_validate可以使用K-fold validation。这意味着训练集部分作为训练集和测试集被迭代地使用。但是,我还没有看到任何关于如何处理验证的信息。数据似乎没有分成三组--培训、验证和测试集。cross_val_score、cross_val_predict和cross_val_validate是如何处理培训、验证和测试的?
发布于 2019-04-25 23:02:59
cross_val_score被用来对模型的精度进行更稳健的估计,而不仅仅是典型的列车测试分割。它做同样的工作,但重复了很多次。这种“重复”可以用许多不同的方式来完成:简历、重复简历、LOO等等。参见滑雪板用户指南中的3.1.2
如果您需要交叉验证超级参数,那么您应该运行一个嵌套交叉验证,其中一个外部循环用于评估模型的准确性,另一个内环用于获得最佳参数。该内循环将在列车和验证集中进一步分割外环的列车组。这个程序应该是这样的:
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幸运的是,可以通过学习将GridSearchCV嵌套到cross_val_score中。
validation = GridSearchCV(estimator, param_grid)
score = cross_val_score(validation, X, y)发布于 2019-04-21 19:35:03
如果过程将数据集拆分为K部件(默认情况下为3),并且执行拟合和验证K时间,那么K确实负责验证。Sklearn文档讨论了将数据集拆分为列车/测试集的问题,但不要误解名称。该测试集实际上是一个验证集。
通过使用cross_val_score,您可以调优模型超参数并获得最佳配置。
因此,一般的过程应该是(自己)将数据集划分为训练集和测试集。
使用交叉验证的培训集(调用cross_val_score),以便优化模型超参数并获得最佳配置。
然后使用测试集对模型进行评估。注意,测试集应该足够大并且代表总体,以便得到泛化误差的无偏估计。
https://stackoverflow.com/questions/55785764
复制相似问题