首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在sklearn中计算随机森林模型的AUC?

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

Stack Overflow用户
提问于 2019-06-27 05:50:10
回答 2查看 9.2K关注 0票数 7

我的数据中的标签是一个(N乘1)向量。对于负样本,标签值为0,对于正样本,标签值为1(因此,这是一个二进制分类问题)。我使用了sklearn的.fit函数,并在我的火车上安装了一个随机的森林。为了计算测试集的AUC,我使用了metrics.roc_auc_score (test_labels, probabilities)。我正在使用predict_proba(my_test_set)来获取概率。但是,predict_proba(my_test_set)返回一个(N_test,2)矩阵。我看到许多人使用这个返回矩阵(predict_proba(my_test_set)[:,1])的第二列并将其提供给metrics.roc_auc_score来计算AUC值,但为什么是第二列?为什么不是第一列(predict_proba(my_test_set)[:,0])?

EN

回答 2

Stack Overflow用户

发布于 2019-06-27 07:54:19

通过将真实标签向量与类的概率预测向量进行比较来计算ROC。

包括RandomForestClassifier在内的所有scikit-learn分类器都会将具有最高标签的类别设置为正类别,并且相应的预测概率将始终位于predict_proba矩阵的第二列。roc_auc_score做了同样的假设,并且还假设具有最高标签的类是正类。因此,两者对正类的定义是相同的,roc_auc_score希望分类器事先将相应的概率放在第二列中。

这就是为什么你应该总是这样做:

代码语言:javascript
复制
roc_auc_score(y_test, RFC.predict_proba(X_test)[:,1])
票数 8
EN

Stack Overflow用户

发布于 2019-06-27 13:47:40

期望y_true是班级的二进制指示器,y_score是相应的分数。

和您的例子一样,y_true是正类的二进制指示符。为了理解哪一列表示哪一类的概率分数,请使用clf.classes_。在我们的示例中,它将返回array([0,1])。因此,我们需要使用第二列来获得类1的概率得分。

即使您有多类问题,也可以将您的标签(y)转换为所需类的二进制指示器,并使用clf.classes_predict_proba()的输出中选择相应的列。

有关更多详细信息,请参阅this示例。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56781373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档