Коэффициент корреляции Мэтью и точность выдают ошибки в RandomizedSearchCV
Я продолжаю получать эту ошибку:
invalid value encountered in double_scalars: mcc = cov_ytyp / np.sqrt(cov_ytyt * cov_ypyp)
Что-то не так с тем, как я реализовал это в пользовательском счетчике?
parameters_XG = {'n_estimators': np.arange(50, 500, 50),
'learning_rate':np.arange(0.1, 1.05, .05),
'colsample_bytree': np.arange(0.1, 1.05, .05),
'sub_sample': np.arange(0.5, 1.05, .05),
'min_child_weight': np.arange(1, 10),
'gamma': np.arange(0.1, 5, 0.2),
'max_depth': np.arange(1, 15),
'scale_pos_weight': np.arange(0.1, 1.0, .05)}
XG_model = XGBClassifier(booster = 'gbtree', random_state=2504, n_jobs = -1)
multi_score = {'neg_log_loss': 'neg_log_loss',
'precision': 'precision',
'recall': 'recall',
'F1_weighted': 'f1_weighted',
'ROC_AUC': 'roc_auc',
'Brier_score': 'brier_score_loss',
'MCC': make_scorer(matthews_corrcoef)}
search_XG = RandomizedSearchCV(XG_model, parameters_XG, scoring = multi_score,
n_jobs = -1, cv = cv_RSKFCV, n_iter = 200, refit = 'neg_log_loss',
random_state = 2504).fit(X_train, y_train)
РЕДАКТИРОВАТЬ: я понимаю, почему он выдает предупреждения/ошибки, однако я не понимаю, почему теперь он вообще не подходит? Я бы ожидал, что многие значения будут inf/nan, но в настоящее время он возвращает трассировку к
random_state = 2504).fit(X_train, y_train)
Как я могу решить эту проблему?
1 ответ
При расчете корреляции Мэтью вы делите два значения. Проблема, которую вы получаете, заключается в том, что вы делите на 0 (с этим трудно справиться).
Вероятно, это связано с тем, что модель всегда предсказывает один класс (например, TP и FP будут равны 0, и знаменатель тоже будет равен 0). Чтобы решить эту проблему, вы можете настроить параметры, которые вы используете, чтобы избежать этих «глупых» моделей, которые предсказывают только один класс.
Вы также можете избежать корреляции Мэтьюса при выполнении RandomizedSearchCV и построить ее только для окончательной модели. Но, конечно, вам будет не хватать этой оценки для каждой итерации модели.