#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_
Так что я спрашиваю вот о чем:
- Я использовал
X_all,y_all
во время grid_search, правильно ли это, или мне следует сделать раздачу перед раздачей, например, раскол 70/30, и выполнить поиск по сетке только на тренировочной половине? - Могу ли я увидеть такие показатели оценки, как
accuracy, f1
? Если да, то как?