Matthew 的相关系数和精度在 RandomizedSearchCV 中抛出错误

Matthew's Correlation Coefficient and Precision throws errors in 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)

编辑: 我明白为什么它会抛出 warnings/errors,但是我不明白的是为什么现在它根本不适合?我希望只有很多值是 inf/nan 但目前它会回溯到 random_state = 2504).fit(X_train, y_train) 我该如何解决这个问题?

在计算马修斯相关系数时,您将两个值相除。你得到的问题是你除以0(很难处理)。

这可能是因为模型总是预测一个 class(例如,TP 和 FP 将为 0,分母也将为 0)。要解决它,您可以调整您正在使用的参数,以避免这些只预测一个 class.

的“愚蠢”模型

也可以在做RandomizedSearchCV时避开Matthews相关,只为最终模型绘制。但是当然,你会错过模型的每次迭代的这个分数。