精度和召回率

理解精度与召回率:分类任务中的关键指标
本文探讨了在分类任务中选择正确衡量指标的重要性,特别是针对不平衡数据集。精度和召回率作为主要指标,分别表示分类正确率和查全率。精度关注正确分类的正例比例,召回率关注所有正例被正确识别的比例。文章还讨论了精度与召回率之间的权衡,并介绍了F1分数作为综合评价方法。此外,通过混淆矩阵和ROC曲线的可视化,进一步阐述了如何评估和调整模型的性能。
一、为分类任务选择正确的衡量指标
  • 不平衡的分类问题:如恐怖分子检测、当疾病在公众中的发病率很低时的疾病监测等
    有这么一个模型:将从美国机场起飞的所有乘客简单地标注为非恐怖分子。已知美国全年平均有 8 亿人次的乘客,并且在 2000-2017 年间共发现了 19 名恐怖分子,这个模型达到了接近完美的准确率——99.9999999%。
    在恐怖分子检测的问题中宣布所有的数据点为负例(非恐怖分子)是毫无裨益的,相反,我们应该聚焦于正例(恐怖分子)的识别。
    直觉告诉我们,我们应该最大化的是统计学上称为召回率或查全率(recall)的衡量指标,或者是最大化模型找到数据集中所有相关案例的能力。
  • 精度:P = TP/(TP+FP);
    反映了被分类器判定的正例中真正的正例样本的比重。
  • 准确率(Accuracy)
    A = (TP + TN)/(P+N) = (TP + TN)/(TP + FN + FP + TN);
    反映了分类器统对整个样本的判定能力——能将正的判定为正,负的判定为负。
  • 召回率(Recall && True Positive Rate)
    Recall=TP/(TP+FN);
    反映了所有真正为正例的样本中被分类器判定出来为正例的比例
  • 精度就是找得对,召回率就是找得全。
    精度(查准率)不冤枉一个好人
    召回率(查全率)不放过一个坏人
    大概就是你问问一个模型,这堆东西是不是某个类的时候,准确率就是 它说是,这东西就确实是的概率吧,召回率就是, 它说是,但它漏说了(1-召回率)这么多。
二、精度—召回率权衡
  • 在某些情况中,我们也许需要以牺牲另一个指标为代价来最大化精度或者召回率。
    例如,在之前的例子中,在对患者进行随访检查的初步疾病筛查中,我们可能希望得到接近于 1 的召回率—我们想找到所有实际患病
### 精度召回率的定义与计算 #### 精度(Precision) 精度是指在所有被预测为正类的样本中,实际为正类的比例。其公式如下: \[ \text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}} \] 其中: - **TP (True Positive)** 表示被正确预测为正类的实际正类数量[^1]。 - **FP (False Positive)** 表示被错误预测为正类的实际负类数量。 通过该公式可以衡量模型对于正类预测的准确性[^3]。 --- #### 召回率(Recall) 召回率表示在所有实际为正类的样本中,被正确预测为正类的比例。其公式如下: \[ \text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} \] 其中: - **TP (True Positive)** 同样表示被正确预测为正类的实际正类数量[^2]。 - **FN (False Negative)** 表示被错误预测为负类的实际正类数量。 召回率用于评估模型能够覆盖多少真实正类的能力。 --- #### 计算实例 假设在一个分类任务中有以下混淆矩阵的数据: - 实际正类总数:60 - 实际负类总数:40 - 预测为正类的数量:50 - 其中真正属于正类的数量:40 则可以通过以下步骤计算精度召回率: 1. **精度** \[ \text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}} = \frac{40}{40 + 10} = 0.8 \] 2. **召回率** \[ \text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} = \frac{40}{40 + 20} = 0.67 \] 以上结果表明,在此场景下,模型具有较高的精度但较低的召回率[^1]。 --- ### Python实现代码 以下是基于上述公式的Python实现代码: ```python def calculate_precision_recall(tp, fp, fn): precision = tp / (tp + fp) if (tp + fp) != 0 else 0 recall = tp / (tp + fn) if (tp + fn) != 0 else 0 return precision, recall # 示例数据 true_positive = 40 false_positive = 10 false_negative = 20 precision, recall = calculate_precision_recall(true_positive, false_positive, false_negative) print(f"Precision: {precision:.2f}") print(f"Recall: {recall:.2f}") ``` 运行结果将显示 `Precision: 0.80` `Recall: 0.67`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值