Правильный способ сделать передискретизацию, поиск по сетке и перекрестную проверку вместе?

#scikit-learn #cross-validation #gridsearchcv

Вопрос:

Для данного набора данных с входными функциями X_all и метками прогнозирования y_all для задачи двоичной классификации я хочу провести избыточную выборку данных с помощью SMOTE, найти наилучшие параметры для моего алгоритма обучения GridSearchCV , а затем наблюдать за результатами, запустив 10 fold cross validation. Какой лучший способ это сделать?

Я понял, что нехорошо заранее перепроверять весь набор данных, а затем проводить перекрестную проверку из-за риска утечки данных. То, в чем я не уверен, следует ли мне применять GridSearch только к части набора данных или ко всему набору данных, поскольку у него также есть возможность использовать cross-validation . Если я использую перекрестную проверку во время поиска по сетке для всего набора данных, это так-как я могу достичь/наблюдать результаты после 10 — кратного резюме?

Мой код до сих пор:

 pipe = Pipeline([('resample', SMOTE(sampling_strategy=1)),  ('model', KNeighborsClassifier())])  cv = StratifiedKFold(n_splits=10)  params = [{'model__n_neighbors':[1,3,5,15,25,45],  'model__weights':['uniform','distance'],  'model__leaf_size': [3,5,7,9,15,25]}] grid_search = GridSearchCV(  estimator=pipe, param_grid=params, cv=cv, refit=True ) grid_search.fit(X_all, y_all) grid_search.best_params_  

Так что я спрашиваю вот о чем:

  1. Я использовал X_all,y_all во время grid_search, правильно ли это, или мне следует сделать раздачу перед раздачей, например, раскол 70/30, и выполнить поиск по сетке только на тренировочной половине?
  2. Могу ли я увидеть такие показатели оценки, как accuracy, f1 ? Если да, то как?