如何在sklearn中计算随机森林模型的AUC?
Posted
技术标签:
【中文标题】如何在sklearn中计算随机森林模型的AUC?【英文标题】:How to calculate AUC for random forest model in sklearn? 【发布时间】:2019-11-08 21:43:30 【问题描述】:我的数据中的标签是一个 (N x 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]
)?
【问题讨论】:
【参考方案1】:roc_auc_score()
期望 y_true
是班级的二元指标,y_score
是相应的分数。
在您的情况下,y_true
是正类的二进制指标。为便于理解,哪一列代表哪个类的概率得分,请使用clf.classes_
。在我们的示例中,它将返回 array([0,1])
。因此,我们需要使用第二列来获得第 1 类的概率分数。
即使遇到多类问题,也可以将标签 (y
) 转换为所需类的二进制指示符,并使用 clf.classes_
从 predict_proba()
的输出中选择相应的列。
查看this 示例了解更多详情。
【讨论】:
谢谢!是的,它确实返回 [0, 1]【参考方案2】:ROC AUC 是通过将真实标签向量与 positive 类的概率预测向量进行比较来计算的。
所有scikit-learn
分类器,包括RandomForestClassifier
,都会将标签最高的类设置为正类,对应的预测概率总是在predict_proba
矩阵的第二列。 roc_auc_score
做了同样的假设,并假设标签最高的类是正类。因此,两者对正类的定义相同,roc_auc_score
期望分类器事先将相应的概率放在第二列中。
这就是为什么你应该总是这样做:
roc_auc_score(y_test, RFC.predict_proba(X_test)[:,1])
【讨论】:
感谢您提供翔实的回答!那么,第一列(predict_proba(my_test_set)[:,0]
)是什么?负类的概率?这就是predict_proba(my_test_set)[i,0] + predict_proba(my_test_set)[i,1] = 1
的原因吗?谢谢!
@khemedi 完全正确!以上是关于如何在sklearn中计算随机森林模型的AUC?的主要内容,如果未能解决你的问题,请参考以下文章
使用超网格搜索和 10 倍 CV 调整参数后,随机森林模型的 AUC 较低
如何在 Sklearn 的随机森林分类器中将训练模型用于另一个数据集?