python 使用sklearn 繪制Precision-Recall曲線

# Precision-Recall 曲線

P = \frac{T_p}{T_p+F_p}
Precision-Recall可以用于分類任務的評估。
當樣本非常不平衡時,Precision-Recal是一個很好的模型度量標準。

# 精確度 與召回率

精確度:Precision(P)
P = \frac{T_p}{T_p+F_p}
召回率:Recall (R)
R = \frac{T_p}{T_p + F_n}

Precision-Recall 曲線展示了不同閾值的精度和召回之間的權(quán)衡。曲線下的面積大時表示高召回和高精度,其中高精度與低假陽性率相關(guān),高召回與低假陰性率相關(guān)。兩者打分都高表明分類器正在返回準確的結(jié)果(高精度),以及返回所有陽性結(jié)果的大部分(高召回率)。

# 平均精度

平均精度:Average precision (AP)
平均精度曲線圖:在每個閾值處實現(xiàn)的精度的加權(quán)平均值,兩個閾值之間召回率的增加作為權(quán)重:
\text{AP} = \sum_n (R_n - R_{n-1}) P_n

# 數(shù)據(jù)準備

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
image.png
PrecisionRecallDisplay.from_predictions(y_true=y, y_pred=pred)
image.png

# 計算平均精確度:Average precision (AP)

from sklearn.metrics import average_precision_score
average_precision_score(y, pred, pos_label=1)
# 0.8583697467770215

#原文:

Precision-Recall

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容