Я работаю над проблемой бинарной классификации, где у меня есть ~ 30 функций ферментных субстратов для прогнозирования EC1 и EC2. Я использую XGBOOST с Optuna для настройки гиперпараметра. Тем не менее, я наблюдаю за несоответствием между значениями AUC ROC, сообщенными Optuna и библиотекой Scikit-Learn.
Вывод Optuna: < /p>
AUC ROC score 1: 0.7109184689577985
AUC ROC score 2: 0.6030927230046949
< /code>
Но оценки AUC ROC с использованием Sklearn для лучших параметров, найденных с использованием Optuna: < /p>
AUC ROC score 1: 0.7065598459411416
AUC ROC score 2: 0.5656470070422535
< /code>
Код для него выглядит так: < /p>
import xgboost as xgb
import optuna
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split
import numpy as np
# Setting a fixed random seed for reproducibility
np.random.seed(42)
def train_model(x_train, y_train, x_eval, y_eval):
def objective(trial):
param = {
'objective': 'binary:logistic',
'eval_metric': 'auc',
'n_estimators': trial.suggest_int('n_estimators', 100, 1000),
'max_depth': trial.suggest_int('max_depth', 3, 6),
'learning_rate': trial.suggest_float('learning_rate', 0.01, 0.1, log=True),
'subsample': trial.suggest_float('subsample', 0.5, 1),
'colsample_bytree': trial.suggest_float('colsample_bytree', 0.5, 1),
'reg_alpha': trial.suggest_float('reg_alpha', 0, 10),
'reg_lambda': trial.suggest_float('reg_lambda', 0, 10),
'gamma': trial.suggest_float('gamma', 0.01, 1, log=True),
'random_state': 42,
'early_stopping_rounds': 10
}
model = xgb.XGBClassifier(**param)
model.fit(x_train, y_train, eval_set=[(x_eval, y_eval)], verbose=False)
y_pred = model.predict_proba(x_eval)[:, 1]
auc_roc = roc_auc_score(y_eval, y_pred)
return auc_roc
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=100)
return study.best_trial.params, study.best_trial.value
# Splitting the data into train and evaluation sets
x_train, x_eval, y_train, y_eval = train_test_split(x_train, y_train, test_size=0.2, random_state=42)
# For EC1
best_params_1, best_auc_1 = train_model(x_train, y_train[:, 0], x_eval, y_eval[:, 0])
classifier_1 = xgb.XGBClassifier(**best_params_1)
classifier_1.fit(x_train, y_train[:, 0])
y_pred_1 = classifier_1.predict_proba(x_eval)[:, 1]
# For EC2
best_params_2, best_auc_2 = train_model(x_train, y_train[:, 1], x_eval, y_eval[:, 1])
classifier_2 = xgb.XGBClassifier(**best_params_2)
classifier_2.fit(x_train, y_train[:, 1])
y_pred_2 = classifier_2.predict_proba(x_eval)[:, 1]
auc_score_1 = roc_auc_score(y_eval[:, 0], y_pred_1)
auc_score_2 = roc_auc_score(y_eval[:, 1], y_pred_2)
< /code>
Я реализовал модель XGBOOST с настройкой гиперпараметров с использованием Optuna. Я ожидал, что значения AUC ROC, полученные из вывода Optuna, будут соответствовать значениям AUC ROC, рассчитанным с использованием функции Scikit-Learn ROC_AUC_SCORE. Однако фактические результаты показывают заметную разницу между этими значениями.
Подробнее здесь: https://stackoverflow.com/questions/766 ... nary-class
Расхождение между AUC ROC OUC ROC и AUC ROC Scikit-Learn для проблемы бинарной классификации ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Я работаю над задачей классификации, используя Scikit-Learn (LogisticRegression ())
Anonymous » » в форуме Python - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-