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相关,只为最终模型绘制。但是当然,你会错过模型的每次迭代的这个分数。
我不断收到此错误:
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相关,只为最终模型绘制。但是当然,你会错过模型的每次迭代的这个分数。