我有一些数据说 100 万行,然后我将 200,000 放在一边(用于验证)并将剩余的 800,000 称为训练集(X),如下所示,所以它不是整个数据,剩余的 200k 是验证集. 我的问题是,下面的网格搜索可以吗?我的 roc 曲线非常高,比如 0.96。我怀疑是因为下面的内容,我是否应该在 x_train 和 y_train 上使用网格搜索,然后再进一步拆分 x_train 和 y_train 以在 pipeline.fit() 上使用?
X=pd.read_csv('data_subset.csv')
X=X.dropna()
Y=X['status'].values
X=X.drop(columns=['status'])
x_train, x_test, y_train, y_test = train_test_split(
X, Y, stratify=Y, random_state=42, test_size=0.2)
model = lgb.LGBMClassifier(silent=True, subsample=0.8,colsample_bytree=0.2,objective='binary')
parameters={
'learning_rate_grid_lgbm': [0.015, 0.001, 0.1],
}
然后我对此数据运行网格搜索:
clf = GridSearchCV(model, parameters, cv=3, scoring='roc_auc')
clf.fit(X, y) ### i.e. instead clf.fit(x_train,y_train)
model = clf.best_estimator_
pipeline = make_pipeline(model)
pipeline.fit(x_train, y_train)
predictions = pipeline.predict_proba(x_test)[:, 1]
roc_auc_score(y_test, predictions)
我的困惑是,如果我必须在 gridsearch 上使用 x_train,我应该如何继续执行之后的步骤?
