PR曲线(Precision-Recall Curve,精确率-召回率曲线)

PR曲线(Precision-Recall Curve,精确率-召回率曲线)是一种用于评估二分类模型性能的工具,特别适用于不平衡数据集。PR曲线通过绘制精确率(Precision)与召回率(Recall)之间的关系,展示模型在不同决策阈值下的表现。

主要概念

  1. 精确率(Precision)

    • 精确率表示被预测为正类的样本中实际为正类的比例。
    • 计算公式:\text{Precision} = \frac{TP}{TP + FP}
    • 其中,TP(True Positives)为真正例数,FP(False Positives)为假正例数。
  2. 召回率(Recall)

    • 召回率表示所有实际为正类的样本中被正确分类为正类的比例。
    • 计算公式:\text{Recall} = \frac{TP}{TP + FN}
    • 其中,FN(False Negatives)为假负例数。

PR曲线的特点

  • PR曲线展示了模型在不同阈值下的精确率和召回率的权衡:当模型的阈值降低时,更多的样本会被分类为正类,这通常会提高召回率但降低精确率;反之,当模型的阈值提高时,精确率通常会提高但召回率会降低。
  • PR曲线比ROC曲线更适合不平衡数据集:在不平衡数据集中,PR曲线能更好地反映模型在少数类(正类)上的表现,因为它关注的是精确率和召回率,而不是假阳性率。

PR曲线的评价指标

  • AP(Average Precision,平均精度)
    • AP 是 PR 曲线下面积的缩写,是衡量模型在所有阈值下精确率的平均值。
    • AP 值越高,表示模型性能越好。

示例代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve, average_precision_score
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression

# 生成一个二分类数据集
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练一个逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测测试集的概率
y_prob = model.predict_proba(X_test)[:, 1]

# 计算精确率和召回率
precision, recall, _ = precision_recall_curve(y_test, y_prob)

# 计算AP
ap = average_precision_score(y_test, y_prob)
print(f"AP: {ap:.2f}")

# 绘制PR曲线
plt.plot(recall, precision, marker='.', label='Logistic Regression (AP = {:.2f})'.format(ap))
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')
plt.legend()
plt.show()

在这个示例中,生成了一个二分类数据集,训练了一个逻辑回归模型,计算了测试集上的精确率和召回率,并绘制了 PR 曲线。同时,计算了 AP 值来量化模型的性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值