问题描述
我不断收到此错误:
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 相关性,并且只为最终模型绘制它。但当然,模型的每次迭代您都会错过这个分数。