Происходит ли передискретизация до или после перекрестной проверки с использованием imblearn конвейеров? - PullRequest
3 голосов
/ 06 мая 2019

Я разбил свои данные на поезд / тест, прежде чем выполнять перекрестную проверку данных тренировки, чтобы проверить свои гиперпараметры. У меня несбалансированный набор данных, и я хочу выполнять передискретизацию SMOTE на каждой итерации, поэтому я установил конвейер, используя imblearn.

Насколько я понимаю, передискретизация должна выполняться после разделения данных на k-кратные значения, чтобы предотвратить утечку информации. Сохраняется ли этот порядок операций (данные разбиваются на k-кратные, k-1-кратные с избыточной дискретизацией, прогнозируются на оставшиеся сгибы) при использовании Pipeline в настройке ниже?

from imblearn.pipeline import Pipeline
model = Pipeline([
        ('sampling', SMOTE()),
        ('classification', xgb.XGBClassifier())
    ])


param_dist = {'classification__n_estimators': stats.randint(50, 500),
              'classification__learning_rate': stats.uniform(0.01, 0.3),
              'classification__subsample': stats.uniform(0.3, 0.6),
              'classification__max_depth': [3, 4, 5, 6, 7, 8, 9],
              'classification__colsample_bytree': stats.uniform(0.5, 0.5),
              'classification__min_child_weight': [1, 2, 3, 4],
              'sampling__ratio': np.linspace(0.25, 0.5, 10)
             }

random_search = RandomizedSearchCV(model,
                                   param_dist,
                                   cv=StratifiedKFold(n_splits=5),
                                   n_iter=10,
                                   scoring=scorer_cv_cost_savings)
random_search.fit(X_train.values, y_train)

1 Ответ

1 голос
/ 07 мая 2019

Ваше понимание верно.Когда вы вводите pipeline как model, данные тренировки (k-1) применяются с использованием .fit(), а тестирование проводится в k-й раз.Затем будет произведена выборка данных обучения.

Документация для imblearn.pipeline .fit() гласит:

Подходит для модели

Установите все преобразователи / сэмплеры один за другим и преобразуйте / сэмплируйте данные, затем скомбинируйте преобразованные / сэмплированные данные, используя окончательную оценку.

...