sklearn roc_auc_score with multi_class==”ovr” should have None average available

我正在尝试使用sklearn的roc_auc_score()函数来计算多类别问题的AUC得分。

我有一个形状为[n_samples,n_classes]的预测矩阵和一个形状为[n_samples]的真实标签向量,分别命名为np_prednp_label

我希望获得每一类的AUC得分集合。

为此,我想使用average参数选项Nonemulti_class参数设置为"ovr",但如果我运行

roc_auc_score(y_score=np_pred, y_true=np_label, multi_class="ovr",average=None)

我得到的反馈是

ValueError: average must be one of ('macro', 'weighted') for multiclass problems

这个错误在sklearn函数处理多类别问题时是预期的;但如果你查看roc_auc_score函数的源代码,你会发现如果multi_class参数设置为"ovr",并且平均值是接受的其中之一,多类别情况会被视为多标签情况,而内部的多标签函数接受None作为average参数。

因此,从代码来看,似乎我应该能够在One vs Rest的情况下执行多类别并使用None平均值,但源代码中的if语句不允许这种组合。

我错了吗?

如果我错了,从理论上讲,我应该伪造一个多标签情况只是为了获得不同类别的不同AUCs,还是应该编写自己的函数来循环不同的类别并输出AUCs?

谢谢


回答:

如你所知,目前sklearn的多类别ROC AUC只能处理macroweighted平均值。但可以实现它,因为它可以单独返回每个类的得分。

从理论上讲,你可以实现OVR并计算每个类的roc_auc_score,如下所示:

roc = {label: [] for label in multi_class_series.unique()}for label in multi_class_series.unique():    selected_classifier.fit(train_set_dataframe, train_class == label)    predictions_proba = selected_classifier.predict_proba(test_set_dataframe)    roc[label] += roc_auc_score(test_class, predictions_proba[:,1])

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注