# Precision-Recall 曲线
Precision-Recall可以用于分类任务的评估。
当样本非常不平衡时,Precision-Recal是一个很好的模型度量标准。
# 精确度 与召回率
精确度:Precision(P)
召回率:Recall (R)
Precision-Recall 曲线展示了不同阈值的精度和召回之间的权衡。曲线下的面积大时表示高召回和高精度,其中高精度与低假阳性率相关,高召回与低假阴性率相关。两者打分都高表明分类器正在返回准确的结果(高精度),以及返回所有阳性结果的大部分(高召回率)。
# 平均精度
平均精度:Average precision (AP)
平均精度曲线图:在每个阈值处实现的精度的加权平均值,两个阈值之间召回率的增加作为权重:
# 数据准备
import numpy as np
from sklearn import metrics
pred = np.concatenate((np.random.normal(5, 2, 30), np.random.normal(7, 2, 30)))
y = np.concatenate((np.full(30, 0), np.full(30, 1)))
# Precision-Recall曲线
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import PrecisionRecallDisplay
prec, recall, _ = precision_recall_curve(y, pred, pos_label=1)
pr_display = PrecisionRecallDisplay(precision=prec, recall=recall, average_precision=average_precision_score(y, pred, pos_label=1)).plot()
pr_display.average_precision
# 0.8583697467770215
PrecisionRecallDisplay.from_predictions(y_true=y, y_pred=pred)
# 计算平均精确度:Average precision (AP)
from sklearn.metrics import average_precision_score
average_precision_score(y, pred, pos_label=1)
# 0.8583697467770215