精准召回

Precision recall

有人能告诉我 closest_zero、closest_zero_p 和 closest_zero_r 是什么意思吗?

from sklearn.metrics import precision_recall_curve
precision, recall, thresholds = precision_recall_curve(y_test, y_scores_lr)
closest_zero = np.argmin(np.abs(thresholds))
closest_zero_p = precision[closest_zero]
closest_zero_r = recall[closest_zero]

plt.figure()
plt.xlim([0.0, 1.01])
plt.ylim([0.0, 1.01])
plt.plot(precision, recall, label='Precision-Recall Curve')
plt.plot(closest_zero_p, closest_zero_r, 'o', markersize = 12, fillstyle = 'none', c='r', mew=3)
plt.xlabel('Precision', fontsize=16)
plt.ylabel('Recall', fontsize=16)
plt.axes().set_aspect('equal')
plt.show()

首先我们有 y_test,这是基本事实,应该是二进制类型——两个 classes(通常是 0 和 1)。此外,我们有 y_scores_lr 这是连续的预测值。 precision_recall_curve 是一个计算值以绘制召回率-精度曲线的函数,其输出为: precision - x 轴的值。 recall - y 轴的值。 thresholds - 用于实现相应精度和召回值的阈值。为了详细说明这些值的含义,每个阈值用于生成不同的 class 化结果,其中 y_scores_lr 低于该值的所有预测都分配给一个 class,并且所有其他值(高于阈值)都被视为另一个 class。通过特定阈值对预测值进行class化后,可以根据class化的结果计算准确率和召回率。

重要的是,现在可以使用精确召回曲线找到执行未来 class化的最佳阈值,或者至少更好地理解模型的行为。

代码寻找一个特定的阈值,最接近零的那个(不管它是正数还是负数)并将相应的精度和召回值取到这个阈值,以便将它绘制为绘制曲线。

所以,closest_zero是最高负阈值的index,还是最低正阈值,取决于哪个更接近于零。 (np.argmin returns 值最低的索引,而 abs 确保仅考虑与零的差异,而不管符号)

因此,closest_zero_pclosest_zero_r是最接近于零的阈值的相同索引处的精度和召回率。