我的数据中的标签是一个(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]
)?
发布于 2019-06-27 07:54:19
通过将真实标签向量与正类的概率预测向量进行比较来计算ROC。
包括RandomForestClassifier
在内的所有scikit-learn
分类器都会将具有最高标签的类别设置为正类别,并且相应的预测概率将始终位于predict_proba
矩阵的第二列。roc_auc_score
做了同样的假设,并且还假设具有最高标签的类是正类。因此,两者对正类的定义是相同的,roc_auc_score
希望分类器事先将相应的概率放在第二列中。
这就是为什么你应该总是这样做:
roc_auc_score(y_test, RFC.predict_proba(X_test)[:,1])
发布于 2019-06-27 13:47:40
期望y_true
是班级的二进制指示器,y_score
是相应的分数。
和您的例子一样,y_true
是正类的二进制指示符。为了理解哪一列表示哪一类的概率分数,请使用clf.classes_
。在我们的示例中,它将返回array([0,1])
。因此,我们需要使用第二列来获得类1的概率得分。
即使您有多类问题,也可以将您的标签(y
)转换为所需类的二进制指示器,并使用clf.classes_
从predict_proba()
的输出中选择相应的列。
有关更多详细信息,请参阅this示例。
https://stackoverflow.com/questions/56781373
复制相似问题