Расхождение между AUC ROC OUC ROC и AUC ROC Scikit-Learn для проблемы бинарной классификацииPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Расхождение между AUC ROC OUC ROC и AUC ROC Scikit-Learn для проблемы бинарной классификации

Сообщение Anonymous »

Я работаю над проблемой бинарной классификации, где у меня есть ~ 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»