Precision-Recall Curve
精确率-召回率曲线绘制了不同阈值下精确率与召回率的关系,展示模型性能以及误报与漏检之间的权衡。
精确率-召回率曲线是一种图表,展示模型的决策阈值变化时,精确率和召回率如何变化。召回率位于横轴,精确率位于纵轴。每个测得的工作点对应一个阈值:模型能找出多少正例,以及模型给出的正类预测有多可靠。这条曲线有助于评估分类器和检测器,尤其适用于误报和漏检代价不同的情况。
精确率-召回率曲线的工作原理#
精确率是正确的正类预测所占的比例:TP / (TP + FP)。召回率,也称灵敏度,是被找出的实际正例所占的比例:TP / (TP + FN)。TP 表示真正例,FP 表示假正例,FN 表示假负例——这些结果都会计入混淆矩阵。
对预测分数应用不同的置信度阈值,就能得到一系列精确率-召回率对。降低阈值会纳入更多预测,因此召回率会提高或保持不变。随着正确和错误的预测进入集合,精确率可能朝任一方向变化,从而形成阶梯状曲线。
Cyril Cleverdon 在其1962 年克兰菲尔德报告中首次提出召回率与相关性关系图,确立了精确率-召回率评估的信息检索渊源。在文档搜索中,检索到的相关文档是真正例,检索到的不相关文档是假正例。
解读曲线及其基线#
如果召回率接近 1 时曲线仍保持较高的精确率,说明模型性能出色。曲线相交时,每个模型在不同的工作区间表现更好。精确率急剧下降的地方,表明新增预测会带来大量误报。
对于没有信息量的随机排序,其基线是正类占比,即标记为正例的样本比例。如果正例占 1%,基线精确率就是 0.01。正例占比变化会改变精确率,因此评估所用的数据群体也是结果的一部分。
受试者工作特征(ROC)曲线则绘制召回率与假正例率之间的关系,假正例率为 FP / (FP + TN),其中 TN 表示真负例。精确率-召回率评估直接体现了警报中正确结果的比例,因此适用于正例稀少的情况。准确率可能会受多数类主导。
选择工作阈值#
根据错误代价,在验证数据上选择工作点。若要求召回率不低于某个最低值,就选择满足要求且精确率最高的点;若要求精确率不低于某个最低值,就选择满足要求且召回率最高的点。最大化F1 分数,即精确率和召回率的调和平均值,可以让两个指标获得同等权重。阈值取值来自底层分数,或精确率-置信度曲线和召回率-置信度曲线。
Ultralytics YOLO 的预测通过 conf 提供这一选择,该参数会筛选带分数的检测结果。在一次学院评估中,使用YOLO26n对四张COCO8验证图像进行评估,IoU 为 0.50;将 conf 从 0.10 提高到 0.25 后,插值所得的人类别精确率/召回率从 0.63/0.80 变为 1.00/0.54:误报减少了,但漏检的人也更多了。
在单独的测试数据上评估时,要保持所选阈值不变。
在 Python 中绘制精确率-召回率曲线#
这个示例使用随附的图像和逻辑回归,将手写数字 9 与其他数字区分开来。使用 pip install scikit-learn matplotlib 安装依赖项,然后调用 scikit-learn 的精确率-召回率绘图 API。
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import PrecisionRecallDisplay
from sklearn.model_selection import train_test_split
X, digits = load_digits(return_X_y=True)
y = digits == 9
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)
model = LogisticRegression(max_iter=2000)
model.fit(X_train, y_train)
PrecisionRecallDisplay.from_estimator(model, X_test, y_test)
plt.savefig("precision_recall_curve.png", bbox_inches="tight")保存的图表展示了留出数字图像在各个可达召回率水平下的精确率。
目标检测与平均精度#
在目标检测中,当预测的边界框与同类别且尚未匹配的标注目标相匹配,并且交并比(IoU)达到或超过阈值时,该预测计为真正例。未匹配的预测(包括重复预测)计为假正例。每个类别都有单独的曲线,且 IoU 要求保持不变。
平均精度(AP)概括了曲线在不同召回率水平上的表现。梯形积分计算的 PR-AUC 和非插值 AP 使用不同的积分规则。平均精度均值(mAP)是各类别 AP 值的平均值。在检测性能指标中,mAP50 使用 IoU 0.50,而 mAP50–95 则对 IoU 从 0.50 到 0.95、步长为 0.05 的十个阈值取平均。










