如何理解PR曲线

博客围绕如何理解PR曲线展开,虽具体内容需点击链接查看,但推测会涉及PR曲线的概念、原理、应用等信息技术领域关键信息,帮助读者深入认识该曲线。
PR曲线Precision-Recall Curve)是一种用于评估二分类模型性能的工具,尤其是在正类样本较少的情况下表现更为突出。PR曲线以召回率(Recall)为横轴,精确率(Precision)为纵轴,通过改变分类阈值,可以绘制出不同阈值下的精确率和召回率之间的关系曲线。 ### PR曲线的构建示例 为了更好地理解PR曲线,以下是一个简单的PR曲线构建示例: 假设有一个二分类问题,模型预测结果和真实标签如下: | 样本编号 | 预测概率 | 真实标签 | |----------|-----------|-----------| | 1 | 0.9 | 1 | | 2 | 0.8 | 1 | | 3 | 0.7 | 0 | | 4 | 0.6 | 1 | | 5 | 0.5 | 0 | | 6 | 0.4 | 0 | | 7 | 0.3 | 1 | | 8 | 0.2 | 0 | | 9 | 0.1 | 0 | #### 步骤: 1. **按预测概率排序**:将样本按照预测概率从高到低排序。 2. **计算每个阈值下的TP、FP、FN**: - TP(True Positive):正确预测为正类的样本数。 - FP(False Positive):错误预测为正类的样本数。 - FN(False Negative):错误预测为负类的样本数。 3. **计算精确率(Precision)和召回率(Recall)**: - 精确率 $ Precision = \frac{TP}{TP + FP} $ - 召回率 $ Recall = \frac{TP}{TP + FN} $ #### 示例计算: 假设按照预测概率从高到低排序后,样本的真实标签如下: | 排序后样本编号 | 预测概率 | 真实标签 | |----------------|-----------|-----------| | 1 | 0.9 | 1 | | 2 | 0.8 | 1 | | 3 | 0.7 | 0 | | 4 | 0.6 | 1 | | 5 | 0.5 | 0 | | 6 | 0.4 | 0 | | 7 | 0.3 | 1 | | 8 | 0.2 | 0 | | 9 | 0.1 | 0 | 通过逐步增加阈值,可以计算出每个阈值下的精确率和召回率: - **阈值 = 0.9**:TP = 1,FP = 0,FN = 3 - Precision = $ \frac{1}{1+0} = 1.0 $ - Recall = $ \frac{1}{1+3} = 0.25 $ - **阈值 = 0.8**:TP = 2,FP = 0,FN = 2 - Precision = $ \frac{2}{2+0} = 1.0 $ - Recall = $ \frac{2}{2+2} = 0.5 $ - **阈值 = 0.7**:TP = 2,FP = 1,FN = 2 - Precision = $ \frac{2}{2+1} = 0.67 $ - Recall = $ \frac{2}{2+2} = 0.5 $ - **阈值 = 0.6**:TP = 3,FP = 1,FN = 1 - Precision = $ \frac{3}{3+1} = 0.75 $ - Recall = $ \frac{3}{3+1} = 0.75 $ - **阈值 = 0.5**:TP = 3,FP = 2,FN = 1 - Precision = $ \frac{3}{3+2} = 0.6 $ - Recall = $ \frac{3}{3+1} = 0.75 $ - **阈值 = 0.4**:TP = 3,FP = 3,FN = 1 - Precision = $ \frac{3}{3+3} = 0.5 $ - Recall = $ \frac{3}{3+1} = 0.75 $ - **阈值 = 0.3**:TP = 4,FP = 3,FN = 0 - Precision = $ \frac{4}{4+3} = 0.57 $ - Recall = $ \frac{4}{4+0} = 1.0 $ ### PR曲线图解 根据上述计算结果,可以绘制PR曲线。以下是Python代码示例,使用`sklearn`库绘制PR曲线: ```python from sklearn.metrics import precision_recall_curve import matplotlib.pyplot as plt # 真实标签和预测概率 y_true = [1, 1, 0, 1, 0, 0, 1, 0, 0] y_scores = [0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1] # 计算精确率、召回率和阈值 precision, recall, thresholds = precision_recall_curve(y_true, y_scores) # 绘制PR曲线 plt.plot(recall, precision, marker='.') plt.xlabel('Recall') plt.ylabel('Precision') plt.title('Precision-Recall Curve') plt.grid(True) plt.show() ``` ### PR曲线的特点 1. **高召回率与高精确率的权衡**:PR曲线反映了在不同阈值下模型的精确率和召回率之间的权衡关系。 2. **适用于类别不平衡的数据集**:PR曲线在类别不平衡的情况下表现优于ROC曲线。 3. **曲线下面积(AUC-PR)**:PR曲线下的面积可以作为模型性能的量化指标,面积越大,模型性能越好。 通过上述示例和代码,可以直观地理解PR曲线的构建过程和应用场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值