使用 sklearn 的 roc_auc_score 进行 OneVsOne 多分类?

Posted

技术标签:

【中文标题】使用 sklearn 的 roc_auc_score 进行 OneVsOne 多分类?【英文标题】:Using sklearn's roc_auc_score for OneVsOne Multi-Classification? 【发布时间】:2020-06-07 09:59:04 【问题描述】:

所以我正在研究一个模型,该模型试图使用 RandomForest 将样本分类为 7 个类别中的 1 个。我能够构建和训练模型,但在使用 roc_auc 函数对其进行评估时,我能够执行“ovr”(oneVsrest)但“ovo”给我带来了一些麻烦。

roc_auc_score(y_test, rf_probs, multi_class = 'ovr', average = 'weighted')

上面的效果非常好,我得到了我的输出,但是,当我将 multi_class 切换到“ovo”时,我理解这对于类不平衡可能会更好,我得到以下错误:

roc_auc_score(y_test, rf_probs, multi_class = 'ovo')

IndexError: 数组索引过多

(我在下面粘贴了整个回溯!)

目前我的数据设置如下:

y_test (61,1)

y_probs (61, 7)

我是否需要以特殊方式重塑我的数据才能使用“ovo”?

在文档https://thomasjpfan.github.io/scikit-learn-website/modules/generated/sklearn.metrics.roc_auc_score.html 中,它说“binary y_true, y_score 应该是具有更大标签的类的分数。多类案例需要 shape = [n_samples, n_classes] 其中分数对应于概率估计。"

此外,整个回溯似乎暗示使用可能使用更二进制的数组(希望这是正确的术语!我是新手!)

非常非常感谢任何想法/想法!

【问题讨论】:

是的。您需要重塑 y_test 以塑造(61, 7)。您可以使用OneHotEncoder 轻松做到这一点。我还没有尝试过,但应该这样做 @TirthPatel 谢谢你,成功了!哇,这么简单的解决方案,我花了好几天的时间! 【参考方案1】:

@Tirth Patel 提供了正确的答案,我需要使用一种热编码来重塑我的测试集。谢谢!

【讨论】:

以上是关于使用 sklearn 的 roc_auc_score 进行 OneVsOne 多分类?的主要内容,如果未能解决你的问题,请参考以下文章

sklearn学习:为什么roc_auc_score()和auc()有不同的结果?

sklearn.metrics中的评估方法介绍(accuracy_score, recall_score, roc_curve, roc_auc_score, confusion_matrix,cla

LinearSVC 和 roc_auc_score() 用于多类问题

不同的结果 roc_auc_score 和 plot_roc_curve

使用sklearn画二分类模型ROC曲线,PR曲线

如何在sklearn中计算随机森林模型的AUC?