Matthew 的相关系数和精度在 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,'sub_sample': np.arange(0.5,'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) 我该如何解决这个问题?

解决方法

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

这可能是因为模型总是在预测一类(例如,TP 和 FP 将为 0,分母也将为 0)。为了解决这个问题,你可以调整你正在使用的参数,以避免这些只预测一个类别的“愚蠢”模型。

您也可以在做 RandomizedSearchCV 时避免 Matthews 相关性,并且只为最终模型绘制它。但当然,模型的每次迭代您都会错过这个分数。