【问题标题】:Matthew's Correlation Coefficient and Precision throws errors in RandomizedSearchCVMatthew 的相关系数和精度在 RandomizedSearchCV 中引发错误
【发布时间】:2021-02-01 10:05:26
【问题描述】:

我不断收到此错误:

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) 我该如何解决这个问题?

【问题讨论】:

    标签: python scikit-learn randomized-algorithm make-scorer


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复,这是有道理的,但我仍然希望它能够适应火车数据并产生许多 inf/nans 但不知何故它根本不适合(见编辑)
    • @Oorschelp 请在提供答案后扩展/更新问题,特别是如果此答案有效/有帮助;这不是 SO 的工作方式。 Accept 答案(您似乎从未在此处回答任何问题)并针对新问题和情况打开一个 new 问题(您可以链接到此线程,如有必要)- 现在,您甚至没有弄清楚新的回溯到底是什么
    • @desertnaut 我会接受这个答案并提出一个新问题。其他人决定答案是否真的有效有点奇怪:实施/理解需要时间。说明了这里抛出的实际错误(我展示了实际的回溯,这就是 python 为我生成的全部内容)。尽管如此,从现在开始我会接受更多的答案。
    • @Oorschelp 道歉,如果我给人的印象是“决定”答案有效;这不是我的意图 - 这是我根据您自己的评论以及问题实际上已更改的事实所猜测的,给人的印象是最初的问题已以某种方式解决。
    • @desertnaut 不用担心,我知道是什么造成了混乱。无论如何感谢您的反馈:)
    猜你喜欢
    • 2015-10-31
    • 2019-02-21
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2021-09-14
    • 2020-06-15
    相关资源
    最近更新 更多