GridSearchCV和Cross_Val_Score的区别

4

我有一个二进制时间序列分类问题。

由于它是一个时间序列,我不能只使用train_test_split来划分数据。所以我使用了这个链接中的对象tscv = TimeSeriesSplit(),得到了下面这样的结果:

enter image description here

我可以从GridSearchCVcross_val_score中看到,我可以将我的分割策略cv = tscv作为参数传递。但我的问题是,GridSearchCVcoss_val_score之间有什么区别?只使用其中一个来训练/测试我的模型就足够了吗?还是应该同时使用两个?先使用GridSearchCV获取最佳超参数,然后再使用cross_val_score


2
它们本质上是在以不同的方式完成相同的工作。事实上,GridSearchCV 本身使用 cross_val_score 来找到参数的最优组合。众所周知,网格搜索是一种非常缓慢的调整超参数的方法,您最好坚持使用 RandomSearchCV 或更先进的贝叶斯超参数优化方法。 - meti
@meti那么GridsearchCV使用的交叉验证只是用来寻找最佳超参数,还是用来计算模型的指标(如roc_auc)时也会进行交叉验证? 在GridsearchCV()之后,我们需要使用cross_validate()吗?还是已经包含在其中了? - skan
如果您使用GridsearchCV,它将根据您选择的指标为您提供最优的超参数。但是,如果您希望得到特定指标(如ROC_CURVE)的报告,您需要单独提供该指标以及最佳超参数的组合。 - meti
1个回答

4

网格搜索是一种评估模型的方法,通过使用不同的超参数设置(其值预先定义),您的GridSearch可以使用交叉验证(因此,存在 GridSearchCV )以提供模型不同参数设置的最终得分。在训练和评估完成后(网格搜索完成后),您可以查看模型表现最佳的参数(通过查看属性best_params_dict)。因此,网格搜索基本上是一种暴力策略,在其中使用所有可能的超参数组合运行模型。 而coss_val_score不执行网格搜索(不使用上述带有所有预定义参数的策略),但可以在交叉验证后获得分数。 希望现在清楚了。


但是两者的 .scores 有时会截然不同。当 k=5 时,coss_val_score 的平均分可能在0.5左右,而 GridSearchCV 的得分可能非常高。你知道为什么会这样吗? - Salih
应该是因为参数不同(因为在网格搜索中,您可能会使用与交叉验证不同的其他参数)。给我一个具体的例子。 - teoML
然后GridsearchCV使用的交叉验证只是用来寻找最佳超参数,还是用来计算模型的指标(如roc_auc)与交叉验证一起?在GridsearchCV()之后,我们需要使用cross_validate()吗?还是已经包含在其中了? - skan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接