我是机器学习领域的新手。我的问题如下:我已经建立了一个模型,并且正在尝试优化这种模型。通过做一些研究,我发现交叉验证可以用来帮助我避免模型过度拟合。此外,可以使用Gridsearchcv帮助我优化此类模型的参数并最终确定最佳的参数。
现在我的问题是,我应该先进行交叉验证,然后使用网格搜索来确定最佳参数,或者使用GridsearchCV本身就可以执行交叉验证?
最佳答案
如@Noki所建议,您可以在Grid Search CV中使用cv参数。
GridSearchCV(estimator, param_grid, scoring=None, n_jobs=None, iid='deprecated',
refit=True, cv=None, verbose=0,
pre_dispatch='2*n_jobs',error_score=nan,return_train_score=False)
该文档还明确指出,如果这是分类问题,它将自动确保它已分层。
但是,我想补充一点:
您可以相对于Y_target变量的值计数使K折动态变化。
您不能以K折的最低频率为1,这会在训练时引发错误。我碰巧面对这个。使用下面的代码片段可以帮助您。
例如
import pandas as pd
Y_target=pd.Series([0,1,1,1,1,0,0,0,6,6,6,6,6,6,6,6,6])
if Y_target.value_counts().iloc[-1]<2:
raise Exception ("No value can have frequency count as 1 in Y-target")
else:
Kfold=Y_target.value_counts().iloc[-1]
然后,您可以在Grid Search中将Kfold分配给您的cv参数
关于machine-learning - 我应该先执行交叉验证,然后再进行网格搜索吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60204229/