使用 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() 用于多类问题