我数据中的标签是(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]
)?
答案 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示例以获取更多详细信息。