Я создал imbalanced-learn
Pipeline
, состоящий из RobustScaler
, SMOTE-NC
, RandomUndersampling
и классификатора случайного леса.
Знак RandomSearchCV
используется для выбора лучших гиперпараметров.
Я хотел бы протестировать лучший оценщик на моем тестовом наборе.
cv = RepeatedStratifiedKFold(n_splits=5,
n_repeats=10,
random_state=42
)
scaler = RobustScaler(quantile_range=(25.0, 75.0))
smote = SMOTENC(
categorical_features=categorical_features,
sampling_strategy=0.35,
random_state=42
)
rus = RandomUnderSampler(sampling_strategy=0.35, random_state=42)
classifier = RandomForestClassifier(random_state=42)
pipeline = imbalanced_make_pipeline(scaler, smote, rus, classifier)
random_search = RandomizedSearchCV(
pipeline,
param_distributions=param,
scoring=scoring_metric,
cv=cv,
n_iter=10,
random_state=42,
n_jobs=-1,
)
best_model = random_search.fit(X_train, y_train).best_estimator_
y_pred = best_model.predict(X_test)
Насколько я понимаю, к тестовому набору следует применить только масштабирование (с настройками, полученными X_train
) и классификатор. SMOTE
и RandomUndersampling
не следует применять к X_test
.
Гарантируется ли это конвейером imbalanced-learn
или мне нужно учитывать что-то еще?
Ваше понимание правильное. Конвейер imbalanced-learn
гарантирует, что к тестовому набору применяются только масштабирование (с настройками, полученными с помощью X_train
) и классификатор. SMOTE
и RandomUndersampling
используются только во время обучения и пропускаются вместо X_test
, обеспечивая прогнозирование всех исходных точек тестовых данных.
Вот что происходит, когда вы звоните best_model.predict(X_test)
:
RobustScaler
использует параметры масштабирования (медиану и квантильный диапазон), полученные во время подбора.SMOTE-NC
и RandomUnderSampler
пропускаются во время прогнозирования. Они используются только для обучения созданию сбалансированного набора данных.RandomForestClassifier
использует подобранную модель для прогнозирования X_test
.