使用精确回忆曲线时确定阈值

时间:2017-09-14 15:30:41

标签: pandas scikit-learn precision-recall

我一直在使用精确回忆曲线,并且无法理解阈值是如何决定的。

这是我的代码:

import sklearn
precision, recall, thresholds = sklearn.metrics.precision_recall_curve(y_test,
                             probas_pred[:,1], pos_label=1, sample_weight=None)

产生

precision = array([ 0.99971396, 1. , 1. , 1. , 1. , 1. , 1. ])
recall = array([ 1. , 0.99885551, 0.99341917, 0.96852647, 0.88898426, 0.70872675, 0. ])
thresholds = array[ 0.5,  0.6,  0.7,  0.8,  0.9,  1. ])

如果我做np.unique(probas_pred[:,1])(随机森林,高级别不平衡),我会得到以下门槛:

thresholds_probas_pred = array([ 0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.])

我认为精确回忆曲线绘制了probas_pred数组中所有唯一值的Precision和Recall。在这种情况下,精确回忆曲线返回的阈值似乎忽略小于0.5的值。有人可以解释一下吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

原因是在阈值= 0.5时,召回已经达到1.换句话说,对于probas_pred <0.5,y_test全为零。进一步降低门槛,召回将保持1。