精确率(精准度),召回率,准确率:机器学习中关于样本和预测的几个概念

评估模型性能指标
本文介绍在图像检索场景下,如何使用TP、FP、TN、FN等术语来评估模型的预测结果,并解释了精确率、召回率及准确率这三个衡量指标的具体含义。

先看一个简单的应用场景:

查询的图片编号为 :c1,c2,c3,c9,c0
样本库中的编号为:s1,s2,s3,s4,s5,s6,s7,s8,

实际情况对应为:

  • c1–s1 , c2–s2 , c3–s3
  • c9和c0 没有对应

通过模型判定的情况是:

情况A : 查c1 ,模型给出 s1 , —-> 能查到的图片,查到了,—-> 术语 TP
情况B: 查c2 ,模型给出 s7 , —-> 能查到的图片,没查到,—-> 术语 FP
情况C :查c9 ,模型没有输出 —-> 不能查到的图片,没查到 —-> 术语 TN
情况D :查c0 ,模型给出s8 , —-> 不能查到的图片,查到了—–> 术语 FN

术语的详解 TP/TN/FP/FN (形容样本属性 和预测结果的判定 )

  1. True Positive (TP): “真正” 指被model预测为正的正样本,即判断为真的正确率
  2. True Negative(TN): “真负” 指被model预测为负的负样本,即判断为假的正确率
  3. False Positive(FP): “假正” 指被模型预测为正的负样本,即误报率
  4. False Negative(FN): “假负” 指被模型预测为负的正样本,即漏报率

理解方式:
1. Positive/Negative是用来形容样本的
以图片查找为例,能在图片中查找到为 Positive(c1,c2,c3) ,不能查到到为Negative(c9,c0)
2. True/False 是用来形容模型发的预测结果的
以图片查找为例:
- 能在图片中查到,通过模型也查到了,为True,情况A
- 不能在图片中 查到,通过模型也没有查到,为True ,情况C
- 能在图片中查到,通过模型却没有查到,为False,情况B
- 不能在图片中查到,通过模型却查到了,为False ,情况D

三个衡量指标

精确率(精准度)(precision):
P = TP/(TP+FP) 指被分类器判定正例中的正样本的比重。
都是针对正样本,正样本中通过模型判定正确的比例。
在样本中能够查询到图片中,通过模型真的能查询到的比例。

召回率(Recall):
R=TP/(TP+FN) = 1- FN/T 指的是被预测为正例的占总的正例的比重。
通过模型预测为正的结果中,有多少实际为正的比例。

准确率(Accuracy):
A = (TP + TN)/(P+N) = (TP + TN)/(TP + FN + FP + TN); 反映了分类器对整个样本的判定能力。
也就是说能将正的判定为正,负的判定为负占整个样本的比例。

本文同步发行在简书上 https://www.jianshu.com/p/3444f24eea51

<think>好的,我现在需要回答用户关于机器学习模型中召回率(Recall)精准度(Precision)是否可以有置信区间(CI)的问题。首先,我需要理解用户的问题。用户可能已经知道如何计算AUC的置信区间,现在想知道其他指标如召回率精准度是否也可以有类似的置信区间。我需要确认召回率精准度的统计性质,以及如何为它们计算置信区间。 首先,我应该回忆召回率精准度的定义。召回率是真正例(TP)除以真实正例的总数(TP + FN),而精准度是真正例(TP)除以预测为正例的总数(TP + FP)。这两个指标都是比例形式的,类似于分类准确率,因此理论上可以使用比例估计的置信区间方法。 接下来,我需要考虑常见的置信区间计算方法。对于二分类问题中的比例,常用的方法包括正态近似法(如Wald区间)、Clopper-Pearson区间(精确区间)、以及基于Bootstrap的方法。用户可能想知道这些方法是否适用于召回率精准度。 然后,我需要分析不同方法的适用情况。例如,正态近似法在样本量较大时表现较好,但在小样本或极端比例(如接近0或1)时可能不准确。Clopper-Pearson区间是保守的,适用于小样本。Bootstrap方法则是一种非参数方法,适用于各种情况,但计算量较大。 此外,用户可能想知道如何在实际操作中计算这些置信区间,是否需要编程或是否有现成的工具可用。比如,在Python中可以使用scikit-learn结合bootstrapped库,或者使用statsmodels中的相关函数。在R语言中,可能有现成的包如binom来帮助计算。 还需要考虑用户的使用场景。如果用户不熟悉编程,可能需要推荐在线工具或手动计算公式。如果用户有编程能力,可以给出代码示例。同时,应该比较不同方法的优缺点,帮助用户根据具体情况选择合适的方法。 另外,需要注意召回率精准度的数据分布。例如,当正类样本很少时(即TP + FN很小),召回率的估计可能不够稳定,此时置信区间可能较宽。同样,精准度如果FP很少,也可能导致置信区间的问题。需要提醒用户注意这些情况下的方法选择。 最后,总结步骤:确认召回率精准度可以计算置信区间,介绍几种常用方法,比较它们的适用场景,给出具体实现方式(如代码示例或在线工具),并提醒注意事项。</think>在机器学习模型中,召回率(Recall)精准度(Precision)**可以计算置信区间(CI)**,但需根据数据分布样本量选择合适的方法。以下是具体实现方式注意事项: --- ### **一、召回率精准度的统计性质** - **召回率(Recall)**: \[ Recall = \frac{TP}{TP + FN} \] 反映模型对正类样本的覆盖能力。 - **精准度(Precision)**: \[ Precision = \frac{TP}{TP + FP} \] 反映模型预测为正类的可靠性。 二者均为**比例型指标**(类似二项分布参数),因此可通过以下方法计算置信区间。 --- ### **二、置信区间计算方法** #### **1. 正态近似法(Wald区间)** - **适用场景**:样本量较大(如正类样本数 > 50),且比例不接近0或1。 - **公式**: \[ \text{CI} = p \pm z_{\alpha/2} \cdot \sqrt{\frac{p(1-p)}{n}} \] - \(p\):召回率精准度的估计(如0.8)。 - \(n\):分母样本量(召回率:真实正类样本数 \(TP + FN\);精准度预测为正类样本数 \(TP + FP\))。 - \(z_{\alpha/2}\):置信水平对应的Z(95% CI时 \(z=1.96\))。 - **示例**: 若召回率 \(Recall=0.7\),真实正类样本数 \(n=100\),则: \[ SE = \sqrt{\frac{0.7 \times 0.3}{100}} = 0.046 \quad \Rightarrow \quad 95\%\ CI = [0.7 \pm 1.96 \times 0.046] = [0.610, 0.790] \] #### **2. 精确法(Clopper-Pearson区间)** - **适用场景**:小样本或极端比例(如召回率接近0或1)。 - **原理**:基于二项分布的累积分布函数直接计算。 - **工具**: - **Python**:`scipy.stats.beta.ppf` ```python from scipy.stats import beta def clopper_pearson(k, n, alpha=0.05): lower = beta.ppf(alpha/2, k, n - k + 1) upper = beta.ppf(1 - alpha/2, k + 1, n - k) return (lower, upper) # 示例:召回率=70/100,精准度=70/80 recall_ci = clopper_pearson(70, 100) # 召回率的CI precision_ci = clopper_pearson(70, 80) # 精准度的CI ``` - **R语言**:`binom.test()` ```r # 召回率:70/100 binom.test(x=70, n=100)$conf.int ``` #### **3. Bootstrap法(推荐)** - **适用场景**:任意样本量,特别是分布未知或存在类别不平衡时。 - **步骤**: 1. 从原始数据中有放回地重复抽样(如1000次)。 2. 每次抽样计算召回率精准度。 3. 取2.5%97.5%分位数作为置信区间。 - **Python代码**: ```python import numpy as np from sklearn.utils import resample # 假设 y_true 为真实标签,y_pred 为预测标签 def calculate_metrics(y_true, y_pred): tp = np.sum((y_true == 1) & (y_pred == 1)) fn = np.sum((y_true == 1) & (y_pred == 0)) fp = np.sum((y_true == 0) & (y_pred == 1)) recall = tp / (tp + fn) if (tp + fn) > 0 else 0 precision = tp / (tp + fp) if (tp + fp) > 0 else 0 return recall, precision # Bootstrap抽样 n_iterations = 1000 recall_samples = [] precision_samples = [] for _ in range(n_iterations): y_true_resampled, y_pred_resampled = resample(y_true, y_pred, replace=True) recall, precision = calculate_metrics(y_true_resampled, y_pred_resampled) recall_samples.append(recall) precision_samples.append(precision) # 计算95% CI recall_ci = np.percentile(recall_samples, [2.5, 97.5]) precision_ci = np.percentile(precision_samples, [2.5, 97.5]) ``` --- ### **三、方法选择依据** | **场景** | **推荐方法** | **原因** | |------------------------------|--------------------|----------------------------------------| | 样本量大,比例适中(0.3-0.7)| 正态近似法 | 计算简单,结果接近真实 | | 样本量小(n < 30) | Clopper-Pearson法 | 避免正态近似法的误差 | | 类别不平衡或分布复杂 | Bootstrap法 | 无需分布假设,适应性强 | | 需要快速实现 | 在线工具或库函数 | 节省编码时间 | --- ### **四、注意事项** 1. **样本量不足时谨慎解读**: - 若真实正类样本数 \(TP + FN\) 极小(如<10),召回率的置信区间可能极宽(如[0.2, 1.0]),此时需谨慎依赖点估计。 2. **精准度的分母稳定性**: - 精准度的分母是预测为正类的样本数 \(TP + FP\)。若模型预测正类极少(如 \(TP + FP < 10\)),精准度的置信区间可能不可靠。 3. **极端比例的处理**: - 若召回率精准度接近0或1,可考虑 **Logit变换** 后计算CI,再逆变换回原尺度: \[ \text{Logit}(p) = \ln\left(\frac{p}{1-p}\right), \quad \text{CI}_{\text{Logit}} = \text{Logit}(p) \pm 1.96 \times SE_{\text{Logit}} \] - 逆变换公式:\( \text{CI} = \frac{e^{\text{CI}_{\text{Logit}}}}{1 + e^{\text{CI}_{\text{Logit}}}} \)。 4. **交叉验证中的CI计算**: - 若模型使用交叉验证,需在每一折中计算指标后合并结果(如取均标准差)。 --- ### **五、工具推荐** - **在线计算器**: [MedCalc 比例置信区间计算器](https://www.medcalc.org/calc/proportion_confidence_interval.php) 输入分子(TP)、分母(TP+FN 或 TP+FP),直接输出Clopper-PearsonWald区间。 - **Python库**: ```python # 使用statsmodels快速计算 from statsmodels.stats.proportion import proportion_confint # 召回率:TP=70, TP+FN=100 recall_ci = proportion_confint(count=70, nobs=100, alpha=0.05, method='normal') # 精准度:TP=70, TP+FP=80 precision_ci = proportion_confint(count=70, nobs=80, alpha=0.05, method='wilson') ``` --- ### **总结** - **可以计算**:召回率精准度均可通过正态近似、Clopper-Pearson或Bootstrap法计算置信区间。 - **推荐方法**: - 优先使用Bootstrap法(适应性强,尤其小样本或复杂分布)。 - 若无编程条件,用在线工具或Clopper-Pearson法。 - **关键点**:根据分母样本比例选择方法,避免盲目使用正态近似。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值