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

时间:2019-06-26 21:50:10

标签: scikit-learn random-forest auc

我数据中的标签是(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])?

2 个答案:

答案 0 :(得分:2)

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

所有scikit-learn分类器(包括RandomForestClassifier)会将具有最高标签的分类设置为正分类,并且相应的预测概率将始终位于{{1}的第二列}矩阵。 predict_proba进行相同的假设,并且还假定标签最高的类别为肯定类别。因此,两者对正类是什么都有相同的定义,roc_auc_score期望分类器事先将相应的概率放在第二栏中。

这就是为什么您应该始终这样做:

roc_auc_score

答案 1 :(得分:1)

roc_auc_score()期望y_true是该课程的一个二进制指标,而y_score是相应的分数。

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

即使遇到多类问题,也可以将标签(y)转换为所需类的二进制指示符,并使用predict_proba()clf.classes_的输出中选择相应的列

请查看this示例以获取更多详细信息。