Я пытаюсь понять, почему лучший оценщик, найденный RandomizedSearchCV, отличается от соответствия ванильной модели наилучшим параметрам, найденным для лучшего оценщика.
Пока у меня есть классификатор:
clf = XGBClassifier()
Поле параметров:
param_grid = {
'max_depth': range(2, 15),
'learning_rate': [0.0001, 0.001, 0.01, 0.1, 0.2, 0,3],
'colsample_bytree': [0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
'colsample_bylevel': [0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
'min_child_weight': [0.5, 1.0, 3.0, 5.0, 7.0, 10.0],
'gamma': [0, 0.25, 0.5, 0.75, 1.0],
'reg_lambda': [0.1, 1.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 40.0, 50.0, 75.0, 100.0],
'n_estimators': range(10, 1000, 10)
}
Параметры обучения:
fit_params = {
'eval_metric': 'logloss',
'early_stopping_rounds': 10,
'eval_set': [(self.X_test[features[:num_features]], self.y_test)]
}
И рандомизированный поиск:
rs_clf = RandomizedSearchCV(
clf, param_grid, n_iter=n_iter,
n_jobs=-1, verbose=0, cv=self.tscv,
scoring='neg_log_loss',
random_state=random_state
)
Если я обучу классификаторЯ получаю следующее:
rs_clf.fit(self.X_train[features[:num_features]], self.y_train, **fit_params)
best_score = rs_clf.best_score_
best_estimator = rs_clf.best_estimator_
best_params = rs_clf.best_params_
Затем я делаю прогноз на тестовом наборе для проверки матрицы путаницы:
y_pred = best_estimator.predict(X_test[best_features])
cnf_matrix = confusion_matrix(y_pred=y_pred, y_true=y_test)
plot_confusion_matrix(cnf_matrix, target_names=['SELL', 'BUY'],
title='Confusion matrix', normalize=False, figsize=(8,6))
Я получаю 77,2% точности ... Сейчасесли я сделаю следующее:
clf = XGBClassifier(**best_params)
clf.fit(X_train[best_features], y_train)
y_pred = clf.predict(X_test[best_features])
cnf_matrix = confusion_matrix(y_pred=y_pred, y_true=y_test)
plot_confusion_matrix(cnf_matrix, target_names=['SELL', 'BUY'],
title='Confusion matrix', normalize=False, figsize=(8,6))
я получу 50% точности .... Разве это не должно быть и 77,2% точности?