我对sklearn中的GridSearchCV
有以下问题。我试过了,但找不到明确的答案。下面是代码补丁iam使用-
dep = df2['responder_flag']
indep = df2.drop(df2.columns[[0,85]], axis = 1)
X_train, X_test, y_train, y_test = train_test_split(indep, dep,test_size=0.25, random_state = 23)
train = xgb.XGBClassifier(objective='binary:logistic')
param_grid = {'max_depth': [4,5], 'n_estimators': [500], 'learning_rate': [0.02,0.01]}
grid = GridSearchCV(train, param_grid,cv=5, scoring='roc_auc')
grid.fit(X_train, y_train)
cross_validation
,即GridSearchCV
中的cv参数,是否等效于Kfold
或在训练数据时使用cross_validation_score
和其他类似函数明确应用的其他cv技术?我可以使用
GridsearchCV
进行交叉验证吗?比如说,如果我不提供多个参数列表,它会等于交叉验证技术吗?一旦执行了
grid.fit(X_train, y_train)
语句,它是否根据已识别的最佳参数训练模型并可直接用于模型预测,还是我需要用grid.best_params_
定义另一个估计器,然后训练并用于预测?
如果这些问题早点得到回答,我们深表歉意。
以下是答案:
-
cv
参数等价于k倍
在GridSearchCV
中,我们给出了一组我们希望模型采用的参数值。假设learning_rate
=0.0001是从[00001,0.01,1,10]中得出的。当我们在gridsearch
中指定cv=5时,它将对000.1
执行5-fold cv
。类似地,它还将对剩余值执行5-fold cv
。在这种情况下k是5。 -
从某种意义上说,是的。但不要这样做,因为GridSearchCV需要一个参数列表。CCD_ 16是一种用于执行超参数调谐的方法。如果不指定多个参数列表,则会破坏使用GridSearch的目的。
-
在完成
grid.fit(X_train, y_train)
之后,不需要手动在训练集上拟合具有grid.best_params_
的模型。GridSearchv
有一个名为refit
的参数,如果我们设置refit = True
,它将自动将grid.best_esitmator_
改装到整个训练集。默认情况下,它设置为True
。文档